utn-cli 2.1.50 → 2.1.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/templates/backend/rutas/misc.js +135 -0
- package/templates/backend/servicios/Nucleo/Miscelaneas.js +4 -0
- package/templates/frontend/src/app/Componentes/Nucleo/tabla/tabla.component.css +6 -1
- package/templates/frontend/src/app/Componentes/Nucleo/tabla/tabla.component.html +6 -5
- package/templates/frontend/src/app/Componentes/Nucleo/tabla/tabla.component.ts +13 -2
package/package.json
CHANGED
|
@@ -4,6 +4,141 @@ const Router = express.Router();
|
|
|
4
4
|
const Miscelaneo = require('./../servicios/Nucleo/Miscelaneas.js');
|
|
5
5
|
const ManejadorDeErrores = require('../servicios/Nucleo/ManejadorDeErrores.js');
|
|
6
6
|
|
|
7
|
+
Router.get('/ObtenerActivosPorPersona', async (solicitud, respuesta, next) => {
|
|
8
|
+
try {
|
|
9
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
10
|
+
try {
|
|
11
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_ActivosPorPersona'), error: undefined });
|
|
12
|
+
} catch (error) {
|
|
13
|
+
const MensajeDeError = 'No fue posible listar vAvatar_ActivosPorPersona';
|
|
14
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
15
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
19
|
+
} catch (error) { next(error); }
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
Router.get('/ObtenerArticulosActivos', async (solicitud, respuesta, next) => {
|
|
23
|
+
try {
|
|
24
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
25
|
+
try {
|
|
26
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_ArticulosActivos'), error: undefined });
|
|
27
|
+
} catch (error) {
|
|
28
|
+
const MensajeDeError = 'No fue posible listar vAvatar_ArticulosActivos';
|
|
29
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
30
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
34
|
+
} catch (error) { next(error); }
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
Router.get('/ObtenerCuentasPresupuestariasActivas', async (solicitud, respuesta, next) => {
|
|
38
|
+
try {
|
|
39
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
40
|
+
try {
|
|
41
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_CuentasPresupuestariasActivas'), error: undefined });
|
|
42
|
+
} catch (error) {
|
|
43
|
+
const MensajeDeError = 'No fue posible listar vAvatar_CuentasPresupuestariasActivas';
|
|
44
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
45
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
49
|
+
} catch (error) { next(error); }
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
Router.get('/ObtenerFormulacionPresupuestaria', async (solicitud, respuesta, next) => {
|
|
53
|
+
try {
|
|
54
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
55
|
+
try {
|
|
56
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_FormulacionPresupuestaria'), error: undefined });
|
|
57
|
+
} catch (error) {
|
|
58
|
+
const MensajeDeError = 'No fue posible listar vAvatar_FormulacionPresupuestaria';
|
|
59
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
60
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
64
|
+
} catch (error) { next(error); }
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
Router.get('/ObtenerMetasActivas', async (solicitud, respuesta, next) => {
|
|
68
|
+
try {
|
|
69
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
70
|
+
try {
|
|
71
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_MetasActivas'), error: undefined });
|
|
72
|
+
} catch (error) {
|
|
73
|
+
const MensajeDeError = 'No fue posible listar vAvatar_MetasActivas';
|
|
74
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
75
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
79
|
+
} catch (error) { next(error); }
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
Router.get('/ObtenerMetasPorPersona', async (solicitud, respuesta, next) => {
|
|
83
|
+
try {
|
|
84
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
85
|
+
try {
|
|
86
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_MetasPorPersona'), error: undefined });
|
|
87
|
+
} catch (error) {
|
|
88
|
+
const MensajeDeError = 'No fue posible listar vAvatar_MetasPorPersona';
|
|
89
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
90
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
94
|
+
} catch (error) { next(error); }
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
Router.get('/ObtenerSolicitudesDeCompra', async (solicitud, respuesta, next) => {
|
|
98
|
+
try {
|
|
99
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
100
|
+
try {
|
|
101
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_SolicitudesDeCompra'), error: undefined });
|
|
102
|
+
} catch (error) {
|
|
103
|
+
const MensajeDeError = 'No fue posible listar vAvatar_SolicitudesDeCompra';
|
|
104
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
105
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
109
|
+
} catch (error) { next(error); }
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
Router.get('/ObtenerUnidadesEjecutorasActivas', async (solicitud, respuesta, next) => {
|
|
113
|
+
try {
|
|
114
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
115
|
+
try {
|
|
116
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_UnidadesEjecutorasActivas'), error: undefined });
|
|
117
|
+
} catch (error) {
|
|
118
|
+
const MensajeDeError = 'No fue posible listar vAvatar_UnidadesEjecutorasActivas';
|
|
119
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
120
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
124
|
+
} catch (error) { next(error); }
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
Router.get('/ObtenerUnidadesEjecutorasPorPersona', async (solicitud, respuesta, next) => {
|
|
128
|
+
try {
|
|
129
|
+
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
130
|
+
try {
|
|
131
|
+
return respuesta.json({ body: await Miscelaneo.listarTablaAvatar('vAvatar_UnidadesEjecutorasPorPersona'), error: undefined });
|
|
132
|
+
} catch (error) {
|
|
133
|
+
const MensajeDeError = 'No fue posible listar vAvatar_UnidadesEjecutorasPorPersona';
|
|
134
|
+
console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
135
|
+
return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
139
|
+
} catch (error) { next(error); }
|
|
140
|
+
});
|
|
141
|
+
|
|
7
142
|
Router.get('/ListarActividades', async (solicitud, respuesta, next) => {
|
|
8
143
|
try {
|
|
9
144
|
if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
@@ -41,6 +41,10 @@ class Miscelaneo {
|
|
|
41
41
|
this.EnlaceDeAcceso = undefined;
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
+
async listarTablaAvatar(NombreDeLaTabla) {
|
|
45
|
+
return await ejecutarConsultaSIGU(`SELECT * FROM \`SIGU\`.\`${NombreDeLaTabla}\``);
|
|
46
|
+
}
|
|
47
|
+
|
|
44
48
|
async PasosDeFlujoDeAprobacion(Identificador, PasoActual, Accion, Metadatos, Justificacion, LastUser) {
|
|
45
49
|
const DatosARetornar = {};
|
|
46
50
|
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
<ng-container matColumnDef="Estado">
|
|
55
55
|
<th mat-header-cell *matHeaderCellDef mat-sort-header>Estado</th>
|
|
56
56
|
<td mat-cell *matCellDef="let element" data-label="Estado">
|
|
57
|
-
<div [class]="element.Estado">{{ element.Estado }}</div>
|
|
57
|
+
<div [class]="element.Estado.replace(' ', '-')">{{ element.Estado }}</div>
|
|
58
58
|
</td>
|
|
59
59
|
</ng-container>
|
|
60
60
|
}
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
<th mat-header-cell *matHeaderCellDef aria-label="Fila expandible"></th>
|
|
100
100
|
<td mat-cell *matCellDef="let element">
|
|
101
101
|
<button mat-icon-button aria-label="Expandir fila"
|
|
102
|
-
(click)="(
|
|
102
|
+
(click)="setElementoExpandible(element); $event.stopPropagation()">
|
|
103
103
|
@if (elementoExpandible === element) {
|
|
104
104
|
<mat-icon>keyboard_arrow_up</mat-icon>
|
|
105
105
|
} @else {
|
|
@@ -111,11 +111,11 @@
|
|
|
111
111
|
<ng-container matColumnDef="expandedDetail">
|
|
112
112
|
<td mat-cell *matCellDef="let element" [attr.colspan]="llavesColumnas.length">
|
|
113
113
|
<div class="example-element-detail" [@detailExpand]="element == elementoExpandible ? 'expanded' : 'collapsed'">
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
@if(element == elementoExpandible) {
|
|
115
|
+
<table mat-table [dataSource]="subDataSource" matSort multiTemplateDataRows class="mat-elevation-z8 separador">
|
|
116
116
|
@for (column of subColumnas; track $index) {
|
|
117
117
|
<ng-container matColumnDef="{{column.Llave}}">
|
|
118
|
-
<th mat-header-cell *matHeaderCellDef> {{column.Alias}} </th>
|
|
118
|
+
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{column.Alias}} </th>
|
|
119
119
|
<td mat-cell *matCellDef="let elementTwo" [attr.data-label]="column.Alias"> {{elementTwo[column.Llave]}}
|
|
120
120
|
</td>
|
|
121
121
|
</ng-container>
|
|
@@ -161,6 +161,7 @@
|
|
|
161
161
|
<tr mat-header-row *matHeaderRowDef="llavesSubColumnas"></tr>
|
|
162
162
|
<tr mat-row *matRowDef="let element; columns: llavesSubColumnas;" class="example-element-row"></tr>
|
|
163
163
|
</table>
|
|
164
|
+
}
|
|
164
165
|
</div>
|
|
165
166
|
</td>
|
|
166
167
|
</ng-container>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, OnDestroy, Output, SimpleChanges, ViewChild } from '@angular/core';
|
|
1
|
+
import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, OnDestroy, Output, QueryList, SimpleChanges, ViewChild, ViewChildren } from '@angular/core';
|
|
2
2
|
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
|
|
3
3
|
import { MatIconModule } from '@angular/material/icon';
|
|
4
4
|
import { MatButtonModule } from '@angular/material/button';
|
|
@@ -70,8 +70,10 @@ export class TablaComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
70
70
|
@Input() public estadosQuePermitenEdicion: string[] = [];
|
|
71
71
|
@Input() public subEstadosQuePermitenEdicion: string[] = [];
|
|
72
72
|
|
|
73
|
-
@
|
|
73
|
+
@ViewChildren(MatSort) allSorts!: QueryList<MatSort>;
|
|
74
|
+
get sort(): MatSort { return this.allSorts?.first; }
|
|
74
75
|
@ViewChild(MatPaginator) paginator!: MatPaginator;
|
|
76
|
+
public subDataSource: MatTableDataSource<any> = new MatTableDataSource<any>([]);
|
|
75
77
|
@Output() GuardarAccion: EventEmitter<any> = new EventEmitter<any>();
|
|
76
78
|
@Output() DescargarInformacion: EventEmitter<any> = new EventEmitter<any>();
|
|
77
79
|
@ViewChild('valorFiltroInput') filtroInput!: ElementRef<HTMLInputElement>;
|
|
@@ -207,6 +209,10 @@ export class TablaComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
207
209
|
if (!this.paginarResultados) {
|
|
208
210
|
this.dataSource.paginator = this.paginator;
|
|
209
211
|
}
|
|
212
|
+
this.subscriptions.add(this.allSorts.changes.subscribe(() => {
|
|
213
|
+
const subSort = this.allSorts.get(1);
|
|
214
|
+
if (subSort) this.subDataSource.sort = subSort;
|
|
215
|
+
}));
|
|
210
216
|
this.subscriptions.add(this.paginator.page.subscribe((event: PageEvent) => {
|
|
211
217
|
localStorage.setItem('pageSize', event.pageSize.toString());
|
|
212
218
|
|
|
@@ -249,6 +255,11 @@ export class TablaComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
249
255
|
}));
|
|
250
256
|
}
|
|
251
257
|
|
|
258
|
+
setElementoExpandible(element: any): void {
|
|
259
|
+
this.elementoExpandible = this.elementoExpandible === element ? null : element;
|
|
260
|
+
this.subDataSource.data = this.elementoExpandible ? (this.elementoExpandible[this.atributoDesplegable] || []) : [];
|
|
261
|
+
}
|
|
262
|
+
|
|
252
263
|
estaAtenuado(element: any, textoAyuda: string): boolean {
|
|
253
264
|
if (!element?.SeccionesTrabajadas) return false;
|
|
254
265
|
try {
|