Add export admin. reports as an Excel file

This commit is contained in:
Pablo Bonilla 2021-08-11 19:18:18 -06:00
parent 326dffa555
commit a39ad439a5
No known key found for this signature in database
GPG Key ID: 46877262B8DE47E2
4 changed files with 81 additions and 12 deletions

2
package-lock.json generated
View File

@ -57,8 +57,8 @@
"@angular/compiler-cli": "12.0.5", "@angular/compiler-cli": "12.0.5",
"@angular/service-worker": "12.0.5", "@angular/service-worker": "12.0.5",
"@types/bootstrap": "^5.0.17", "@types/bootstrap": "^5.0.17",
"@types/file-saver": "^2.0.3",
"@types/chartist": "^0.11.1", "@types/chartist": "^0.11.1",
"@types/file-saver": "^2.0.3",
"@types/jest": "26.0.23", "@types/jest": "26.0.23",
"@types/jquery": "^3.5.6", "@types/jquery": "^3.5.6",
"@types/node": "15.12.2", "@types/node": "15.12.2",

View File

@ -1,4 +1,7 @@
<div class="content"> <div class="content">
<button type="button" class="ds-btn ds-btn--primary" (click)="exportReportesGeneralesAdministradorExcel()">Export as Excel</button>
<button type="button" class="ds-btn ds-btn--primary" (click)="exportReportesGeneralesAdministradorPDF()">Export as PDF</button>
<div class="container-fluid"> <div class="container-fluid">
<div class="row justify-content-around"> <div class="row justify-content-around">
<div class="col-lg-3 col-sm-6"> <div class="col-lg-3 col-sm-6">
@ -13,7 +16,7 @@
<div class="col-xs-7 w-50"> <div class="col-xs-7 w-50">
<div class="numbers"> <div class="numbers">
<p class="ds-title">Ganancias por plantillas</p> <p class="ds-title">Ganancias por plantillas</p>
{{ gananciasTotales | currency: 'CR' }} ${{ gananciasTotales | number: '1.2' }}
</div> </div>
</div> </div>
</div> </div>
@ -137,5 +140,3 @@
</div> </div>
</div> </div>
</div> </div>
<button type="button" class="ds-btn ds-btn--primary" (click)="exportReportesGeneralesAdministradorPDF()">Export as PDF</button>
<button type="button" class="ds-btn ds-btn--primary" (click)="exportReportesGeneralesAdministradorExcel()">Export as Excel</button>

View File

@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core';
import * as XLSX from 'xlsx'; import * as XLSX from 'xlsx';
import * as FileSaver from 'file-saver'; import * as FileSaver from 'file-saver';
import { jsPDF } from 'jspdf'; import { jsPDF } from 'jspdf';
import { exportAsExcelFile } from '../export/export_excel'; import { exportAsExcelFile, exportAsExcelTable } from '../export/export_excel';
import { generatePDFTableData, createPDFTableHeaders, generatePDFTable } from '../export/export_pdf'; import { generatePDFTableData, createPDFTableHeaders, generatePDFTable } from '../export/export_pdf';
import { FacturaService } from '../../factura/service/factura.service'; import { FacturaService } from '../../factura/service/factura.service';
@ -99,11 +99,11 @@ export class DashboardAdminComponent implements OnInit {
.subscribe(res => { .subscribe(res => {
const tmpCategorias = res.body; const tmpCategorias = res.body;
this.categorias = tmpCategorias?.filter(c => c.estado === 'ACTIVE'); this.categorias = tmpCategorias?.filter(c => c.estado === 'ACTIVE');
let cantPublicadas = 0;
let cantFinalizadas = 0;
const publicadas: number[] | null = []; const publicadas: number[] | null = [];
const finalizadas: number[] | null = []; const finalizadas: number[] | null = [];
this.categorias?.forEach(c => { this.categorias?.forEach(c => {
let cantPublicadas = 0;
let cantFinalizadas = 0;
this.encuestas?.forEach(e => { this.encuestas?.forEach(e => {
if (e.categoria?.id === c.id && e.estado === 'ACTIVE') { if (e.categoria?.id === c.id && e.estado === 'ACTIVE') {
cantPublicadas = cantPublicadas + 1; cantPublicadas = cantPublicadas + 1;
@ -198,13 +198,63 @@ export class DashboardAdminComponent implements OnInit {
Cantidad de encuestas publicadas por categoría Cantidad de encuestas publicadas por categoría
Cantidad de encuestas finalizadas por categoría Cantidad de encuestas finalizadas por categoría
Cantidad de encuestas publicadas por mes y año Cantidad de encuestas publicadas por mes y año
Cantidad de encuestas
Cantidad de personas que han completado sus encuestas
Cantidad de encuestas activas
Cantidad de encuestas finalizadas
Cantidad de comentarios de retroalimentación
*/ */
const _sheets = ['reportes generales']; const _sheets = ['reportes generales', 'enc. publicadas', 'enc. publicadas categoría', 'enc. finalizadas categoría'];
const _reporteUsuarios = { usuarios_activos: 100, usuarios_bloqueados: 50 };
const _excelFinalData = [_reporteUsuarios]; const _reporteUsuarios = [
const _fileName = 'reporte_general'; {
ganancias_plantillas: this.gananciasTotales,
usuarios_activos: this.cantUsuarioActivos,
usuarios_bloqueados: this.cantUsuarioBloqueados,
},
];
// listaMesesAnnos
// encuestasPublicadasMesAnno
const _reporteEncuestasPublicadas: any[] = [];
this.listaMesesAnnos.forEach((date: any, index) => {
let _report: any = {};
_report['fecha'] = date;
_report['cantidad'] = this.encuestasPublicadasMesAnno[index];
_reporteEncuestasPublicadas.push(_report);
});
// this.categorias
// this.encuestasPublicadasCategoria
const _reporteCantidadEncuestasPublicadasCategoria: any[] = [];
this.categorias!.forEach((categoria: any, index) => {
let _report: any = {};
_report['categoria'] = categoria.nombre;
_report['cantidad'] = this.encuestasPublicadasCategoria[index];
_reporteCantidadEncuestasPublicadasCategoria.push(_report);
});
// this.categorias
// this.encuestasFinalzadasCategoria
const _reporteCantidadEncuestasFinalizadasCategoria: any[] = [];
this.categorias!.forEach((categoria: any, index) => {
let _report: any = {};
_report['categoria'] = categoria.nombre;
_report['cantidad'] = this.encuestasFinalzadasCategoria[index];
_reporteCantidadEncuestasFinalizadasCategoria.push(_report);
});
// exportAsExcelTable();
const _excelFinalData = [
_reporteUsuarios,
_reporteEncuestasPublicadas,
_reporteCantidadEncuestasPublicadasCategoria,
_reporteCantidadEncuestasFinalizadasCategoria,
];
const _fileName = 'reportes_datasurvey';
exportAsExcelFile(_sheets, _excelFinalData, _fileName); exportAsExcelFile(_sheets, _excelFinalData, _fileName);
} }
@ -215,6 +265,13 @@ export class DashboardAdminComponent implements OnInit {
Cantidad de encuestas publicadas por categoría Cantidad de encuestas publicadas por categoría
Cantidad de encuestas finalizadas por categoría Cantidad de encuestas finalizadas por categoría
Cantidad de encuestas publicadas por mes y año Cantidad de encuestas publicadas por mes y año
Cantidad de encuestas
Cantidad de personas que han completado sus encuestas
Cantidad de encuestas activas
Cantidad de encuestas finalizadas
Cantidad de comentarios de retroalimentación
*/ */
const doc = new jsPDF(); const doc = new jsPDF();

View File

@ -10,7 +10,7 @@ export const exportAsExcelFile = (sheetNames: string[], arrayOfData: any[], exce
arrayOfData.forEach((data, index) => { arrayOfData.forEach((data, index) => {
let sheetName = sheetNames[index]; let sheetName = sheetNames[index];
let worksheet = XLSX.utils.json_to_sheet([data]); let worksheet = XLSX.utils.json_to_sheet(data);
XLSX.utils.book_append_sheet(workbook, worksheet, sheetName); XLSX.utils.book_append_sheet(workbook, worksheet, sheetName);
}); });
@ -24,3 +24,14 @@ const saveAsExcelFile = (buffer: any, fileName: any) => {
FileSaver.saveAs(data, generatedFileName); FileSaver.saveAs(data, generatedFileName);
}; };
export const exportAsExcelTable = () => {
const workbook = XLSX.utils.book_new();
let worksheet = XLSX.utils.json_to_sheet([{ test: 1 }, { test: 2 }]);
XLSX.utils.book_append_sheet(workbook, worksheet, 'test');
const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
saveAsExcelFile(excelBuffer, 'test');
};