Skip to content

Commit

Permalink
feat udistrital/polux_cliente#440: Solicitudes v2
Browse files Browse the repository at this point in the history
- Se ajusta comunicación entre componente que maneja la lógica de las solicitudes y el del formulario.
- Creación de solicitud se hace mediante ruta
- Títulos
  • Loading branch information
lud committed Nov 30, 2023
1 parent 7b3081a commit 71f8d8e
Show file tree
Hide file tree
Showing 6 changed files with 123 additions and 67 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
<mat-card>
<mat-card-header>
Registrar solicitud
{{ titulo }}
</mat-card-header>
<mat-card-content class="form-container" style="padding-top: 2rem;">
<mat-card-header *ngIf="tipoSolicitudSeleccionada.Id">
{{ tipoSolicitudSeleccionada.TipoSolicitud.Nombre }}
</mat-card-header>
<mat-card-content class="form-container" style="padding-top: 2rem;" *ngIf="!solicitudId">
<mat-form-field appearance="outline" *ngIf="!siModalidad && !mostrarFormulario">
<mat-label>Modalidad</mat-label>
<mat-select [(ngModel)]="modalidadId" (selectionChange)="cargaTiposSolicitudInicial()">
<mat-option value=0>Seleccionar</mat-option>
<mat-option *ngFor="let modalidad of modalidades" [value]="modalidad.Id">
{{modalidad.Nombre}}
{{ modalidad.Nombre }}
</mat-option>
</mat-select>
</mat-form-field>
Expand All @@ -17,12 +20,12 @@
<mat-select [(ngModel)]="tipoSolicitudSeleccionada" (selectionChange)="mostrarForm()">
<mat-option value=0>Seleccionar</mat-option>
<mat-option *ngFor="let tipo of tiposSolicitud" [value]="tipo">
{{tipo.TipoSolicitud.Nombre}}
{{ tipo.TipoSolicitud.Nombre }}
</mat-option>
</mat-select>
</mat-form-field>
<app-form-solicitud *ngIf="mostrarFormulario" [trabajoGradoId]="trabajoGradoId" (volver)="eventVolverForm()"
[tipoSolicitudSeleccionadaId]="tipoSolicitudSeleccionada.Id">
(dataForm)="postDocumentos($event)" [tipoSolicitudSeleccionadaId]="tipoSolicitudSeleccionada.Id">
</app-form-solicitud>
</mat-card-content>
</mat-card>
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { TipoSolicitud } from 'src/app/shared/models/tipoSolicitud.model';
import { environment } from 'src/environments/environment';
import { GestorDocumentalService } from '../../services/gestorDocumentalService';
import { DetalleTipoSolicitudForm } from 'src/app/shared/models/detalleTipoSolicitud.model';
import { UserService } from '../../services/userService';

@Component({
selector: 'app-crud-solicitudes',
Expand All @@ -18,8 +19,9 @@ export class CrudSolicitudesComponent implements OnInit {
@Input() solicitudId = 0;

modalidades: Modalidad[] = [];
tiposSolicitud: ModalidadTipoSolicitud[] = []; // Solicitudes realizadas por el estudiante anteriormente
tiposSolicitud: ModalidadTipoSolicitud[] = [];

titulo = 'Registrar Solicitud' || 'Revisar Solicitud';
tipoSolicitudSeleccionada: ModalidadTipoSolicitud = new ModalidadTipoSolicitud();
modalidadId = 0;
siModalidad = false;
Expand Down Expand Up @@ -48,11 +50,15 @@ export class CrudSolicitudesComponent implements OnInit {

constructor(
private request: RequestManager,
private userService: UserService,
private gestorDocumental: GestorDocumentalService,
) { }
) {
this.codigo = this.userService.user.userService?.Codigo;
}

ngOnInit(): void {
if (this.modo === 'create' && this.solicitudId === 0) {
this.titulo = 'Registrar Solicitud';
this.verificarSiPuedeSolicitar()
.then(async puedeSolicitar => {
if (puedeSolicitar) {
Expand All @@ -67,7 +73,7 @@ export class CrudSolicitudesComponent implements OnInit {
// }
})
} else if (this.modo === 'update' && this.solicitudId > 0) {

this.titulo = 'Revisar Solicitud';
}

}
Expand Down Expand Up @@ -109,7 +115,7 @@ export class CrudSolicitudesComponent implements OnInit {
}

public cargaTiposSolicitudInicial() {
if (this.modalidadId) {
if (this.modalidadId > 0) {
this.tipoSolicitudSeleccionada = <ModalidadTipoSolicitud>{ TipoSolicitud: <TipoSolicitud>{ Id: 2 } };
const payload = `query=TipoSolicitud.Id:${this.tipoSolicitudSeleccionada.TipoSolicitud.Id},Modalidad.Id:${this.modalidadId}&limit=1`;
this.request.get(environment.POLUX_SERVICE, `modalidad_tipo_solicitud?${payload}`)
Expand Down Expand Up @@ -483,19 +489,20 @@ export class CrudSolicitudesComponent implements OnInit {
})
}

private cargarDocumentos(detallesConDocumento: any[]) {
public postDocumentos(detalles: DetalleTipoSolicitudForm[]) {
const detallesConDocumento = detalles.filter(detalle => detalle.Detalle.TipoDetalle.Nombre === 'Documento');
if (detallesConDocumento.length) {
// OK, the returned client is connected
var fileTypeError = false;
detallesConDocumento.forEach((detalle) => {
var documento = detalle.fileModel;
var tam = parseInt(detalle.Detalle.Descripcion.split(';')[1] + '000');
if (documento.type !== 'application/pdf' || documento.size > tam) {
fileTypeError = true;
let errorDocumento = false;
for (let detalleConDocumento of detallesConDocumento) {
const documento = detalleConDocumento.fileModel;
const size = parseInt(detalleConDocumento.Detalle.Descripcion.split(';')[1] + '000');
if (documento.type !== 'application/pdf' || documento.size > size) {
errorDocumento = true;
break;
}
});
}

if (!fileTypeError) {
if (!errorDocumento) {
const archivos: any[] = [];
detallesConDocumento.forEach(file => {
const data = {
Expand All @@ -506,25 +513,18 @@ export class CrudSolicitudesComponent implements OnInit {
Tipo: 'Archivo',
Observaciones: 'Solicitud inicial',
},
descripcion: file.nombre,
descripcion: file.Detalle.Nombre,
}
archivos.push(data);
})

this.gestorDocumental.uploadFiles(archivos)
.subscribe(() => this.postSolicitud([]))
// swal(
// $translate.instant('ERROR.SUBIR_DOCUMENTO'),
// $translate.instant('VERIFICAR_DOCUMENTO'),
// 'warning'
// );
// $scope.loadFormulario = false;

} else {
// Alerta error archivo
}
} else {
//agregar validación de error
// $scope.loadFormulario = true;
this.postSolicitud([]);
}
};
Expand Down Expand Up @@ -717,13 +717,13 @@ export class CrudSolicitudesComponent implements OnInit {
}

private getEspaciosInscritos(idTrabajoGrado: number) {
const payload = 'query=trabajo_grado:' + idTrabajoGrado + '&limit=0';
this.request.get(environment.POLUX_SERVICE, `vinculacion_trabajo_grado?${payload}`)
const payload = 'query=TrabajoGrado:' + idTrabajoGrado + '&limit=0';
this.request.get(environment.POLUX_SERVICE, `espacio_academico_inscrito?${payload}`)
.subscribe((responseEspacios) => {
if (responseEspacios.length) {
this.carreraElegida = responseEspacios[0].EspaciosAcademicosElegibles.CarreraElegible.Id;
}
})
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ import { TipoSolicitud } from 'src/app/shared/models/tipoSolicitud.model';
export class FormSolicitudComponent implements OnInit {
@Input() tipoSolicitudSeleccionadaId: number = 0;
@Input() trabajoGradoId: number = 0;
@Output() volver = new EventEmitter;
@Output() volver = new EventEmitter<void>();
@Output() dataForm = new EventEmitter<DetalleTipoSolicitudForm[]>();

areasConocimiento: any[] = [];
// * @property {Object} estudiante Datos del estudiante que esta realizando la solicitud.
Expand All @@ -29,7 +30,6 @@ export class FormSolicitudComponent implements OnInit {
Trabajo: any = {};// Datos del trabajo de grado que cursa el estudiante que esta realizando la solicitud.
// * @property {Boolean} solicitudConDetalles Indicador que maneja el contenido de los detalles dentro de una solicitud
// * @property {Boolean} restringirModalidadesProfundizacion Indicador que maneja la restricción de modalidades para crear solicitud y solo habilita la modalidad de profundización
detallesConDocumento: any[] = []; // Colección que maneja los detalles con documento de una solicitud
codigo = '';// Texto que carga el código del estudiante en sesión
// * @property {Object} Trabajo Objeto que carga la información del estudiante con trabajo de grado registrado
carreraElegida: any = {};// Objeto que carga la información sobre la carrera elegida por el estudiante
Expand All @@ -43,7 +43,6 @@ export class FormSolicitudComponent implements OnInit {
// * @property {Object} blob Objeto que carga la información sobre el Blob del documento en carga
// * @property {Object} content Objeto que define las propiedades de visualización para el documento en carga
// * @property {Number} contador contador para no repetir valores en la modalidad de pasantia
url = 'url';
estudiantesTg: any[] = []; // Estudiantes asociados al tranajo de grado.

loadDocenteSolicitud = false;
Expand All @@ -63,9 +62,33 @@ export class FormSolicitudComponent implements OnInit {
this.cargarFormularioSolicitud();
this.obtenerAreas();
this.getEspaciosInscritos(this.trabajoGradoId);
this.getVinculadosTg();
}
}

private getVinculadosTg() {
if (!this.trabajoGradoId) {
return;
}

const payload = `query=TrabajoGrado:${this.trabajoGradoId},Activo:true&limit=0`;
this.request.get(environment.POLUX_SERVICE, `vinculacion_trabajo_grado?${payload}`)
.subscribe((responseVinculacion) => {
this.Trabajo.evaluadores = [];
responseVinculacion.forEach((vinculado: any) => {
if (vinculado.RolTrabajoGrado.Id === 1) {
this.Trabajo.directorInterno = vinculado;
} else if (vinculado.RolTrabajoGrado.Id === 2) {
this.Trabajo.directorExterno = vinculado;
} else if (vinculado.RolTrabajoGrado.Id === 3) {
this.Trabajo.evaluadores.push(vinculado);
} else if (vinculado.RolTrabajoGrado.Id === 4) {
this.Trabajo.codirector = vinculado;
}
});
});
}

public onInputFileDocumento(event: any) {
const sizeSoporte = 8;
if (event.target.files.length > 0) {
Expand Down Expand Up @@ -339,8 +362,6 @@ export class FormSolicitudComponent implements OnInit {
}

public validarFormularioSolicitud() {
this.detallesConDocumento = [];

this.detalles.forEach((detalle) => {
if (detalle.Detalle.TipoDetalle.Nombre === 'Numerico') {
detalle.respuesta = detalle.respuestaNumerica + '';
Expand All @@ -349,8 +370,7 @@ export class FormSolicitudComponent implements OnInit {
detalle.respuesta = detalle.opciones[0].bd;
}
if (detalle.Detalle.TipoDetalle.Nombre === 'Documento') {
detalle.respuesta = this.url;
this.detallesConDocumento.push(detalle);
detalle.respuesta = '';
}
if (detalle.Detalle.TipoDetalle.Nombre === 'Directiva') {
if (detalle.Detalle.Descripcion == 'solicitar-asignaturas') {
Expand Down Expand Up @@ -424,18 +444,14 @@ export class FormSolicitudComponent implements OnInit {
this.erroresFormulario = true;
}
if (detalle.Detalle.TipoDetalle.Nombre === 'Selector' || detalle.Detalle.TipoDetalle.Nombre === 'Lista') {
var contiene = false;
//
detalle.opciones.forEach((opcion: any) => {
if (opcion.bd == detalle.respuesta) {
contiene = true;
}
});
//Si el detalle es de docente co-director se puede dejar vacio
let contiene = detalle.opciones.findIndex((opcion: any) => opcion.bd === detalle.respuesta) > -1;

// Si el detalle es de docente co-director se puede dejar vacio
if (detalle.Detalle.Id == 56 && (detalle.respuesta == '' || detalle.respuesta == 'No solicita')) {
detalle.respuesta = 'No solicita';
contiene = true;
}

if (!contiene) {
// swal(
// 'Validación del formulario',
Expand Down Expand Up @@ -469,6 +485,7 @@ export class FormSolicitudComponent implements OnInit {

if (!this.erroresFormulario) {
// emit
this.dataForm.emit(this.detalles);
} else {
// Error form
}
Expand Down Expand Up @@ -687,8 +704,8 @@ export class FormSolicitudComponent implements OnInit {
}

private getEspaciosInscritos(idTrabajoGrado: number) {
const payload = 'query=trabajo_grado:' + idTrabajoGrado + '&limit=0';
this.request.get(environment.POLUX_SERVICE, `vinculacion_trabajo_grado?${payload}`)
const payload = 'query=TrabajoGrado:' + idTrabajoGrado + '&limit=0';
this.request.get(environment.POLUX_SERVICE, `espacio_academico_inscrito?${payload}`)
.subscribe((responseEspacios) => {
if (responseEspacios.length) {
responseEspacios.forEach((espacio: any) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,16 @@
<!-- <angular2-smart-table [settings]="settings" [source]="data"></angular2-smart-table> -->
<app-crud-solicitudes></app-crud-solicitudes>
<mat-card>
<mat-card-header>
Módulo de Solicitudes
</mat-card-header>
<mat-card-content *ngIf="!modoCrud">
<angular2-smart-table [settings]="settings" [source]="data" (edit)="onEdit($event)" (create)="onCreate()">
</angular2-smart-table>
</mat-card-content>

<app-crud-solicitudes *ngIf="modoCrud" [modo]="modoCrud"
[solicitudId]="solicitudSeleccionada"></app-crud-solicitudes>
<mat-card-actions *ngIf="modoCrud">
<button type="button" (click)="onVolver()" mat-raised-button color="primary">VOLVER</button>
</mat-card-actions>

</mat-card>
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { Component, OnInit } from '@angular/core';
import { AddAction, DeleteAction, EditAction, Settings } from 'angular2-smart-table';
import { AddAction, DeleteAction, EditAction, EditEvent, Settings } from 'angular2-smart-table';
import { environment } from 'src/environments/environment';
import { RequestManager } from 'src/app/core/manager/request.service';
import { UserService } from '../../services/userService';
import { Router } from '@angular/router';

@Component({
selector: 'app-listar-solicitudes',
Expand All @@ -11,32 +12,47 @@ import { UserService } from '../../services/userService';
})
export class ListarSolicitudesComponent implements OnInit {
data: any[] = [];
modoCrud = '';
solicitudSeleccionada = 0;

constructor(
private request: RequestManager,
private userService: UserService
private userService: UserService,
private router: Router,
) { }

ngOnInit(): void {
this.getSolicitudes();
}

public onVolver() {
this.modoCrud = '';
this.solicitudSeleccionada = 0;
}

public onEdit(event: EditEvent) {
this.modoCrud = 'update';
this.solicitudSeleccionada = event.data.Id;
}

public onCreate() {
this.router.navigateByUrl('/pages/solicitudes/crear_solicitud');
}

private getSolicitudes(): void {
if (this.userService.user?.user?.email) {
this.request.get(
environment.POLUX_MID_SERVICE,
`solicitudes?user=${this.userService.user.user.email}`
).subscribe({
next: (solicitudes: any[]) => {
this.data = solicitudes;
solicitudes.forEach(s => {
s.FechaSolicitud = s.SolicitudTrabajoGrado.Fecha;
s.SolicitudId = s.SolicitudTrabajoGrado.Id;
});
}, error: () => {
console.log('fail?');
}
});
this.request.get(environment.POLUX_MID_SERVICE, `solicitudes?user=${this.userService.user.user.email}`)
.subscribe({
next: (solicitudes: any[]) => {
this.data = solicitudes;
solicitudes.forEach(s => {
s.FechaSolicitud = s.SolicitudTrabajoGrado.Fecha;
s.SolicitudId = s.SolicitudTrabajoGrado.Id;
});
}, error: () => {
console.error('fail');
}
});
}
return
}
Expand Down

0 comments on commit 71f8d8e

Please sign in to comment.