2021-08-10 01:07:19 +00:00
|
|
|
import { Component, OnInit } from '@angular/core';
|
2021-08-10 22:18:54 +00:00
|
|
|
import * as XLSX from 'xlsx';
|
2021-08-11 00:07:25 +00:00
|
|
|
import * as FileSaver from 'file-saver';
|
|
|
|
import { jsPDF } from 'jspdf';
|
2021-08-12 01:18:18 +00:00
|
|
|
import { exportAsExcelFile, exportAsExcelTable } from '../export/export_excel';
|
2021-08-11 00:07:25 +00:00
|
|
|
import { generatePDFTableData, createPDFTableHeaders, generatePDFTable } from '../export/export_pdf';
|
2021-08-10 01:07:19 +00:00
|
|
|
|
2021-08-11 11:15:08 +00:00
|
|
|
import { FacturaService } from '../../factura/service/factura.service';
|
|
|
|
import { UsuarioExtraService } from '../../usuario-extra/service/usuario-extra.service';
|
|
|
|
import { CategoriaService } from '../../categoria/service/categoria.service';
|
|
|
|
import { EncuestaService } from '../../encuesta/service/encuesta.service';
|
|
|
|
|
|
|
|
import { ICategoria } from '../../categoria/categoria.model';
|
|
|
|
import { IEncuesta } from '../../encuesta/encuesta.model';
|
|
|
|
import { finalize } from 'rxjs/operators';
|
|
|
|
|
|
|
|
import * as Chartist from 'chartist';
|
|
|
|
|
|
|
|
import { faWallet, faUsers, faUsersSlash } from '@fortawesome/free-solid-svg-icons';
|
|
|
|
|
2021-08-10 01:07:19 +00:00
|
|
|
@Component({
|
|
|
|
selector: 'jhi-dashboard-admin',
|
|
|
|
templateUrl: './dashboard-admin.component.html',
|
|
|
|
styleUrls: ['./dashboard-admin.component.scss'],
|
|
|
|
})
|
|
|
|
export class DashboardAdminComponent implements OnInit {
|
2021-08-11 11:15:08 +00:00
|
|
|
cantUsuarioActivos: number | undefined = 0;
|
|
|
|
cantUsuarioBloqueados: number | undefined = 0;
|
|
|
|
encuestasPublicadasCategoria: number[] = [];
|
|
|
|
encuestasFinalzadasCategoria: number[] = [];
|
|
|
|
encuestasPublicadasMesAnno: number[] = [];
|
|
|
|
listaMesesAnnos: string[] = [];
|
|
|
|
gananciasTotales: number = 0;
|
|
|
|
categorias: ICategoria[] | undefined = [];
|
|
|
|
encuestas: IEncuesta[] | undefined = [];
|
|
|
|
faWallet = faWallet;
|
|
|
|
faUsers = faUsers;
|
|
|
|
faUsersSlash = faUsersSlash;
|
|
|
|
|
|
|
|
chartFechas = [];
|
|
|
|
|
|
|
|
constructor(
|
|
|
|
protected facturaService: FacturaService,
|
|
|
|
protected usuarioExtraService: UsuarioExtraService,
|
|
|
|
protected encuestaService: EncuestaService,
|
|
|
|
protected categoriaService: CategoriaService
|
|
|
|
) {}
|
|
|
|
|
|
|
|
ngOnInit(): void {
|
|
|
|
this.loadAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
trackId(_index: number, item: ICategoria): number {
|
|
|
|
return item.id!;
|
|
|
|
}
|
|
|
|
|
|
|
|
loadAll() {
|
|
|
|
this.cargarGananciasTotales();
|
|
|
|
this.cargarCantidadUsuarios();
|
|
|
|
this.cargarEncuestas();
|
|
|
|
}
|
|
|
|
|
|
|
|
cargarGananciasTotales() {
|
|
|
|
this.facturaService.query().subscribe(
|
|
|
|
res => {
|
|
|
|
const tempFacturas = res.body;
|
|
|
|
tempFacturas?.forEach(f => {
|
|
|
|
if (f.costo != undefined) {
|
|
|
|
this.gananciasTotales += f.costo;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
() => {}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
cargarCantidadUsuarios() {
|
|
|
|
this.usuarioExtraService.query().subscribe(res => {
|
|
|
|
const tmpUsuarios = res.body;
|
|
|
|
this.cantUsuarioActivos = tmpUsuarios?.filter(u => u.estado === 'ACTIVE').length;
|
|
|
|
this.cantUsuarioBloqueados = tmpUsuarios?.filter(u => u.estado === 'SUSPENDED').length;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
cargarEncuestas() {
|
|
|
|
this.encuestaService
|
|
|
|
.query()
|
|
|
|
.pipe(finalize(() => this.cargarCategorias()))
|
|
|
|
.subscribe(res => {
|
|
|
|
const tmpEncuestas = res.body;
|
|
|
|
this.encuestas = tmpEncuestas?.filter(e => e.estado === 'ACTIVE' || e.estado === 'FINISHED');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
cargarCategorias() {
|
|
|
|
this.categoriaService
|
|
|
|
.query()
|
|
|
|
.pipe(finalize(() => this.acomodarMesesYAnnos()))
|
|
|
|
.subscribe(res => {
|
|
|
|
const tmpCategorias = res.body;
|
|
|
|
this.categorias = tmpCategorias?.filter(c => c.estado === 'ACTIVE');
|
|
|
|
const publicadas: number[] | null = [];
|
|
|
|
const finalizadas: number[] | null = [];
|
|
|
|
this.categorias?.forEach(c => {
|
2021-08-12 01:18:18 +00:00
|
|
|
let cantPublicadas = 0;
|
|
|
|
let cantFinalizadas = 0;
|
2021-08-11 11:15:08 +00:00
|
|
|
this.encuestas?.forEach(e => {
|
|
|
|
if (e.categoria?.id === c.id && e.estado === 'ACTIVE') {
|
|
|
|
cantPublicadas = cantPublicadas + 1;
|
|
|
|
}
|
|
|
|
if (e.categoria?.id === c.id && e.estado === 'FINISHED') {
|
|
|
|
cantFinalizadas = cantFinalizadas + 1;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
publicadas.push(cantPublicadas);
|
|
|
|
finalizadas.push(cantFinalizadas);
|
|
|
|
});
|
|
|
|
this.encuestasPublicadasCategoria = publicadas;
|
|
|
|
this.encuestasFinalzadasCategoria = finalizadas;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
acomodarMesesYAnnos() {
|
|
|
|
const fechas: string[] | null = [];
|
|
|
|
const cantEncuestasFechas: number[] | null = [];
|
|
|
|
var encuestasPublicadas = this.encuestas?.filter(e => e.estado === 'ACTIVE');
|
|
|
|
if (encuestasPublicadas) {
|
|
|
|
encuestasPublicadas = this.ordenarFechas(encuestasPublicadas);
|
|
|
|
encuestasPublicadas.forEach(e => {
|
|
|
|
if (e.fechaPublicacion) {
|
|
|
|
let fecha = this.formatoFecha(e.fechaPublicacion);
|
|
|
|
if (!fechas.includes(fecha)) {
|
|
|
|
fechas.push(fecha);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.listaMesesAnnos = fechas;
|
|
|
|
|
|
|
|
this.listaMesesAnnos.forEach(f => {
|
|
|
|
let contEncuestaDeFecha = 0;
|
|
|
|
if (encuestasPublicadas) {
|
|
|
|
encuestasPublicadas.forEach(e => {
|
|
|
|
if (e.fechaPublicacion) {
|
|
|
|
let fecha = this.formatoFecha(e.fechaPublicacion);
|
|
|
|
if (f === fecha) {
|
|
|
|
contEncuestaDeFecha++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
cantEncuestasFechas.push(contEncuestaDeFecha);
|
|
|
|
});
|
|
|
|
this.encuestasPublicadasMesAnno = cantEncuestasFechas;
|
|
|
|
}
|
|
|
|
this.llenarGraficoEncuestasXFechas();
|
|
|
|
}
|
|
|
|
|
|
|
|
llenarGraficoEncuestasXFechas() {
|
|
|
|
if (this.listaMesesAnnos && this.encuestasPublicadasMesAnno) {
|
|
|
|
var data = {
|
|
|
|
// A labels array that can contain any sort of values
|
|
|
|
labels: this.listaMesesAnnos,
|
|
|
|
// Our series array that contains series objects or in this case series data arrays
|
|
|
|
series: [this.encuestasPublicadasMesAnno],
|
|
|
|
};
|
|
|
|
var options = {
|
|
|
|
low: 0,
|
|
|
|
showArea: true,
|
|
|
|
showLabel: true,
|
|
|
|
axisY: {
|
|
|
|
onlyInteger: true,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
new Chartist.Line('.ct-chart', data, options);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
formatoFecha(fecha: any): string {
|
|
|
|
return fecha.month() + 1 + '/' + fecha.year();
|
|
|
|
}
|
2021-08-10 01:07:19 +00:00
|
|
|
|
2021-08-11 11:15:08 +00:00
|
|
|
ordenarFechas(encuestasPublicadas: IEncuesta[]): IEncuesta[] {
|
|
|
|
if (encuestasPublicadas) {
|
|
|
|
encuestasPublicadas.sort((e1, e2) => {
|
|
|
|
if (e1.fechaPublicacion && e2.fechaPublicacion) {
|
|
|
|
return e1.fechaPublicacion < e2.fechaPublicacion ? -1 : e1.fechaPublicacion > e2.fechaPublicacion ? 1 : 0;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return encuestasPublicadas;
|
|
|
|
}
|
2021-08-10 22:18:54 +00:00
|
|
|
|
2021-08-11 00:07:25 +00:00
|
|
|
exportReportesGeneralesAdministradorExcel(): void {
|
2021-08-10 22:18:54 +00:00
|
|
|
/*
|
|
|
|
Cantidad de usuarios activos
|
|
|
|
Cantidad de usuarios bloqueados
|
|
|
|
Cantidad de encuestas publicadas por categoría
|
|
|
|
Cantidad de encuestas finalizadas por categoría
|
|
|
|
Cantidad de encuestas publicadas por mes y año
|
2021-08-12 01:18:18 +00:00
|
|
|
|
|
|
|
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
|
2021-08-10 22:18:54 +00:00
|
|
|
*/
|
|
|
|
|
2021-08-12 01:18:18 +00:00
|
|
|
const _sheets = ['reportes generales', 'enc. publicadas', 'enc. publicadas categoría', 'enc. finalizadas categoría'];
|
2021-08-10 22:18:54 +00:00
|
|
|
|
2021-08-12 01:18:18 +00:00
|
|
|
const _reporteUsuarios = [
|
|
|
|
{
|
|
|
|
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';
|
2021-08-11 00:22:01 +00:00
|
|
|
exportAsExcelFile(_sheets, _excelFinalData, _fileName);
|
2021-08-11 00:07:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
exportReportesGeneralesAdministradorPDF(): void {
|
|
|
|
/*
|
|
|
|
Cantidad de usuarios activos
|
|
|
|
Cantidad de usuarios bloqueados
|
|
|
|
Cantidad de encuestas publicadas por categoría
|
|
|
|
Cantidad de encuestas finalizadas por categoría
|
|
|
|
Cantidad de encuestas publicadas por mes y año
|
2021-08-12 01:18:18 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2021-08-11 00:07:25 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
const doc = new jsPDF();
|
|
|
|
|
|
|
|
const _reporteUsuarios = [{ usuarios_activos: '100', usuarios_bloqueados: '50' }];
|
|
|
|
const _docData = generatePDFTableData(_reporteUsuarios);
|
|
|
|
|
|
|
|
const _headers = ['usuarios_activos', 'usuarios_bloqueados'];
|
|
|
|
const _docHeaders = createPDFTableHeaders(_headers);
|
2021-08-11 00:22:01 +00:00
|
|
|
const _fileName = 'reporte_general';
|
|
|
|
const _docTitle = 'Reportes Generales de la Aplicación';
|
2021-08-11 00:07:25 +00:00
|
|
|
|
2021-08-11 00:22:01 +00:00
|
|
|
generatePDFTable(doc, _docData, _docHeaders, _fileName, _docTitle);
|
2021-08-10 22:18:54 +00:00
|
|
|
}
|
2021-08-10 01:07:19 +00:00
|
|
|
}
|