validaciones en perfil completo

parent f5477a32
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class UserProfilesService {
private userProfilesSubject: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);
userProfiles$: Observable<string[]> = this.userProfilesSubject.asObservable();
constructor() {}
setUserProfiles(profiles: string[]) {
this.userProfilesSubject.next(profiles);
}
}
...@@ -13,6 +13,7 @@ import { throwError, timer } from 'rxjs'; ...@@ -13,6 +13,7 @@ import { throwError, timer } from 'rxjs';
import { catchError, switchMap, timeout } from 'rxjs/operators'; import { catchError, switchMap, timeout } from 'rxjs/operators';
import { AuthorizationService } from './AuthorizationService'; import { AuthorizationService } from './AuthorizationService';
import { AccesoNoAutorizadoComponent } from 'src/app/modules/main/pages/programa/opciones/AccesoNoAutorizado/AccesoNoAutorizado.component'; import { AccesoNoAutorizadoComponent } from 'src/app/modules/main/pages/programa/opciones/AccesoNoAutorizado/AccesoNoAutorizado.component';
import { UserProfilesService } from './UserProfilesService';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
...@@ -28,6 +29,7 @@ export class AuthService { ...@@ -28,6 +29,7 @@ export class AuthService {
private userProfilesSubject: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]); private userProfilesSubject: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);
userProfiles$: Observable<string[]> = this.userProfilesSubject.asObservable(); userProfiles$: Observable<string[]> = this.userProfilesSubject.asObservable();
formularioEnviado: boolean; formularioEnviado: boolean;
userProfiles: string[];
constructor( constructor(
private oAuthService: OAuthService, private oAuthService: OAuthService,
...@@ -35,13 +37,22 @@ export class AuthService { ...@@ -35,13 +37,22 @@ export class AuthService {
private globalUserService: GlobalUserService, private globalUserService: GlobalUserService,
private httpClient: HttpClient, private httpClient: HttpClient,
private router: Router, private router: Router,
private dialog: MatDialog private dialog: MatDialog,
private userProfilesService: UserProfilesService,
) { ) {
this.configureOauthService(); this.configureOauthService();
// Establecer intervalo de renovación del token
const refreshTokenInterval = setInterval(() => {
this.checkAndRefreshToken();
}, 300000); // 5 minutos en milisegundos
} }
get tokenClaims(): TokenClaim { get tokenClaims(): TokenClaim {
return { return {
...@@ -130,7 +141,11 @@ private getUserProfiles(email: string) { ...@@ -130,7 +141,11 @@ private getUserProfiles(email: string) {
this.httpClient.get<string[]>(`http://localhost:8080/api/v1.0/usuario/findPerfilesByUsuarioEmail/${email}`).subscribe( this.httpClient.get<string[]>(`http://localhost:8080/api/v1.0/usuario/findPerfilesByUsuarioEmail/${email}`).subscribe(
(profiles: string[]) => { (profiles: string[]) => {
this.setGlobalUserProfiles(profiles); // Actualiza los perfiles del usuario this.setGlobalUserProfiles(profiles); // Actualiza los perfiles del usuario
this.isUiEnabled = true; // Habilitar la interfaz una vez que se completó la verificación this.isUiEnabled = true;
this.userProfiles = profiles; // Habilitar la interfaz una vez que se completó la verificación
console.log('Perfiles del usuario en AuthService:', profiles);
// Asigna los perfiles a la propiedad userProfiles
this.userProfilesService.setUserProfiles(profiles); // Actualiza los perfiles en el servicio compartido
}, },
(error) => { (error) => {
...@@ -138,8 +153,11 @@ private getUserProfiles(email: string) { ...@@ -138,8 +153,11 @@ private getUserProfiles(email: string) {
} }
); );
} }
setUserProfiles(profiles: string[]) {
this.userProfilesSubject.next(profiles);
}
private setGlobalUserProfiles(profiles: string[]) { setGlobalUserProfiles(profiles: string[]) {
this.userProfilesSubject.next(profiles); this.userProfilesSubject.next(profiles);
} }
...@@ -172,6 +190,7 @@ private setGlobalUserProfiles(profiles: string[]) { ...@@ -172,6 +190,7 @@ private setGlobalUserProfiles(profiles: string[]) {
} }
public isLoggedIn(): boolean { public isLoggedIn(): boolean {
if (this.oAuthService.getAccessToken() === null) { if (this.oAuthService.getAccessToken() === null) {
return false; return false;
...@@ -202,6 +221,25 @@ private setGlobalUserProfiles(profiles: string[]) { ...@@ -202,6 +221,25 @@ private setGlobalUserProfiles(profiles: string[]) {
return typeof idToken['sub'] !== 'undefined' ? idToken['sub'].toString() : ''; return typeof idToken['sub'] !== 'undefined' ? idToken['sub'].toString() : '';
} }
} }
private async checkAndRefreshToken() {
const accessTokenExpiration = this.oAuthService.getAccessTokenExpiration();
const currentTime = new Date().getTime();
// Renueva el token si está a punto de expirar en los próximos X segundos (por ejemplo, 300 segundos)
const refreshThreshold = 300 * 1000; // 300 segundos en milisegundos
if (accessTokenExpiration - currentTime < refreshThreshold) {
try {
await this.oAuthService.refreshToken();
console.log('Token renovado exitosamente.');
} catch (error) {
console.error('Error al renovar el token:', error);
}
}
}
} }
function ngOnDestroy() {
throw new Error('Function not implemented.');
}
...@@ -10,11 +10,13 @@ export class TokenInterceptor implements HttpInterceptor { ...@@ -10,11 +10,13 @@ export class TokenInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const accessToken = this.oAuthService.getAccessToken(); const accessToken = this.oAuthService.getAccessToken();
const email = this.oAuthService.getIdentityClaims()['email']; const email = this.oAuthService.getIdentityClaims()['email'];
const id_token = this.oAuthService.getIdToken();
if (accessToken) { if (accessToken) {
const headers = request.headers const headers = request.headers
.set('Authorization', `Bearer ${accessToken}`) .set('Authorization', `Bearer ${accessToken}`)
.set('email', email); // envío el email en el encabezado .set('email', email) // envío el email en el encabezado
.set('id_token', id_token);
const modifiedRequest = request.clone({ headers }); const modifiedRequest = request.clone({ headers });
return next.handle(modifiedRequest); return next.handle(modifiedRequest);
...@@ -24,4 +26,3 @@ export class TokenInterceptor implements HttpInterceptor { ...@@ -24,4 +26,3 @@ export class TokenInterceptor implements HttpInterceptor {
} }
} }
} }
...@@ -231,6 +231,7 @@ import { AccesoDenegadoComponent } from './pages/programa/opciones/AccesoDenegad ...@@ -231,6 +231,7 @@ import { AccesoDenegadoComponent } from './pages/programa/opciones/AccesoDenegad
import { AccesoNoAutorizadoComponent } from './pages/programa/opciones/AccesoNoAutorizado/AccesoNoAutorizado.component'; import { AccesoNoAutorizadoComponent } from './pages/programa/opciones/AccesoNoAutorizado/AccesoNoAutorizado.component';
import { ErroresComponent } from './pages/programa/opciones/errores/errores.component'; import { ErroresComponent } from './pages/programa/opciones/errores/errores.component';
import { MatTooltipModule } from '@angular/material/tooltip'; import { MatTooltipModule } from '@angular/material/tooltip';
import { ConfirmarFinalizarComponent } from './pages/programa/opciones/confirmar-finalizar/confirmar-finalizar.component';
@NgModule({ @NgModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
declarations: [ declarations: [
...@@ -409,7 +410,8 @@ import { MatTooltipModule } from '@angular/material/tooltip'; ...@@ -409,7 +410,8 @@ import { MatTooltipModule } from '@angular/material/tooltip';
ListarDocentesAsignadosComponent, ListarDocentesAsignadosComponent,
AccesoDenegadoComponent, AccesoDenegadoComponent,
AccesoNoAutorizadoComponent, AccesoNoAutorizadoComponent,
ErroresComponent ErroresComponent,
ConfirmarFinalizarComponent
], ],
imports: [ imports: [
MatTooltipModule, MatTooltipModule,
......
...@@ -152,3 +152,22 @@ ...@@ -152,3 +152,22 @@
margin-bottom: 16px; margin-bottom: 16px;
} }
.Column1 {
padding-left: 0px;
padding-right: 0px;
width: 10px;
white-space: normal;
overflow: visible;
}
.Column {
padding-left: 0px;
padding-right: 0px;
max-width: 100%;
white-space: inherit;
/* overflow: visible;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; */
}
...@@ -179,9 +179,10 @@ export class AddCalificacionVinculacionComponent implements OnInit { ...@@ -179,9 +179,10 @@ export class AddCalificacionVinculacionComponent implements OnInit {
); );
} }
openModal() { openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, { const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true disableClose: true,
data: {mensaje: mensaje}
}); });
dialogRef.afterClosed().subscribe(result => { dialogRef.afterClosed().subscribe(result => {
...@@ -212,7 +213,7 @@ export class AddCalificacionVinculacionComponent implements OnInit { ...@@ -212,7 +213,7 @@ export class AddCalificacionVinculacionComponent implements OnInit {
this.cabEvalProyService.guardarParametros(this.cabeceraEvalProy).subscribe(() => { this.cabEvalProyService.guardarParametros(this.cabeceraEvalProy).subscribe(() => {
this.enviarEvaluacion(this.cabEvalProyService.obtenerId()) this.enviarEvaluacion(this.cabEvalProyService.obtenerId())
console.log("cabecera enviada ", this.cabeceraEvalProy) console.log("cabecera enviada ", this.cabeceraEvalProy)
this.openModal() this.openModal('La Calificación ha sido asignada al Proyecto')
this.guardar() this.guardar()
}); });
} }
......
...@@ -117,7 +117,13 @@ export class ActaDirectorProyectoComponent implements OnInit { ...@@ -117,7 +117,13 @@ export class ActaDirectorProyectoComponent implements OnInit {
async onSubmit() { async onSubmit() {
if (this.myForm.valid) { if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado; this.proyecto.uzytavproyec_id = this.idRecuperado;
try {
const pdfData = await this.enviarPDF(); const pdfData = await this.enviarPDF();
if (pdfData.idPDF === null || pdfData.idPDF === undefined) {
} else {
if (pdfData.idPDF !== null && pdfData.idPDF !== undefined) { if (pdfData.idPDF !== null && pdfData.idPDF !== undefined) {
this.proyecto.uzytavproyec_com_part1_url = pdfData.idPDF; this.proyecto.uzytavproyec_com_part1_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part1_nom = pdfData.filename; this.proyecto.uzytavproyec_com_part1_nom = pdfData.filename;
...@@ -133,6 +139,10 @@ export class ActaDirectorProyectoComponent implements OnInit { ...@@ -133,6 +139,10 @@ export class ActaDirectorProyectoComponent implements OnInit {
); );
} }
} }
} catch (error) {
}
}
} }
...@@ -149,6 +159,7 @@ export class ActaDirectorProyectoComponent implements OnInit { ...@@ -149,6 +159,7 @@ export class ActaDirectorProyectoComponent implements OnInit {
}; };
} catch (error) { } catch (error) {
this.openModalError('Ya existe un Documento con ese Nombre'); this.openModalError('Ya existe un Documento con ese Nombre');
this.archivoEsPDFValido = false;
return { return {
idPDF: null, idPDF: null,
filename: '' filename: ''
......
...@@ -48,7 +48,7 @@ export class ActaCompromisoCarrerasComponent implements OnInit { ...@@ -48,7 +48,7 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10); this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.proyecto = this.mostrarOcultarService.editProyecto; this.proyecto = this.mostrarOcultarService.editProyecto;
this.cambio = false; this.cambio = false;
...@@ -97,7 +97,12 @@ export class ActaCompromisoCarrerasComponent implements OnInit { ...@@ -97,7 +97,12 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
if (this.myForm.valid) { if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado; this.proyecto.uzytavproyec_id = this.idRecuperado;
try {
const pdfData = await this.enviarPDF(); const pdfData = await this.enviarPDF();
if (pdfData.idPDF === null || pdfData.idPDF === undefined) {
} else {
this.proyecto.uzytavproyec_com_part2_url = pdfData.idPDF; this.proyecto.uzytavproyec_com_part2_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part2_nom = pdfData.filename; this.proyecto.uzytavproyec_com_part2_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe( this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
...@@ -108,8 +113,12 @@ export class ActaCompromisoCarrerasComponent implements OnInit { ...@@ -108,8 +113,12 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
this.cambio = false; this.cambio = false;
}, },
error => { error => {
});
} }
); } catch (error) {
}
} }
} }
...@@ -125,7 +134,8 @@ export class ActaCompromisoCarrerasComponent implements OnInit { ...@@ -125,7 +134,8 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
filename: response.fileName filename: response.fileName
}; };
} catch (error) { } catch (error) {
this.openModalError('¡Este PDF ya se ha subido!'); this.openModalError('Este PDF ya se ha subido');
this.archivoEsPDFValido = false;
return { return {
idPDF: null, idPDF: null,
filename: '' filename: ''
......
...@@ -2,31 +2,43 @@ ...@@ -2,31 +2,43 @@
<form class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit()"> <form class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<!-- Información de la institución --> <!-- Información de la institución -->
<div class="save-button"> <div class="save-button">
<button mat-raised-button color="primary" *ngIf="!cambio" (click)="cambiar()">Editar</button> <button mat-raised-button color="primary" *ngIf="!cambio"
<button mat-raised-button color="primary" [disabled]="!archivoEsPDFValido" *ngIf="cambio">Guardar</button> (click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" [disabled]="!archivoEsPDFValido"
*ngIf="cambio">Guardar</button>
<span class="separator"></span> <span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio" (click)="cancelado()">Cancelar</button> <button mat-raised-button color="warn" *ngIf="cambio"
(click)="cancelado()">Cancelar</button>
</div> </div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && !cambio"> <div class="input-container"
*ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && !cambio">
<label>Subir Archivo</label> <label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo"> <input type="file" id="uzytavconvoca_digital" accept=".pdf"
(change)="onFileChange($event)" formControlName="archivo">
</div> </div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && cambio"> <div class="input-container"
*ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && cambio">
<label>Subir Archivo</label> <label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo"> <input type="file" id="uzytavconvoca_digital" accept=".pdf"
(change)="onFileChange($event)" formControlName="archivo">
</div> </div>
<button class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && !cambio"> <button class="input-container"
<img src="../../../../../../../assets/img/icons/pdf.png" style="width: 50px; height: 50px;" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && !cambio">
<img src="../../../../../../../assets/img/icons/pdf.png"
style="width: 50px; height: 50px;"
(click)="verPDF(proyecto.uzytavproyec_aprob_con_dep_url,proyecto.uzytavproyec_aprob_con_dep_nom)" (click)="verPDF(proyecto.uzytavproyec_aprob_con_dep_url,proyecto.uzytavproyec_aprob_con_dep_nom)"
aria-placeholder="Ver PDF">Descargar PDF aria-placeholder="Ver PDF">Descargar PDF
</button> </button>
<div class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && cambio"> <div class="input-container"
*ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && cambio">
<label>Subir Archivo</label> <label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo"> <input type="file" id="uzytavconvoca_digital" accept=".pdf"
(change)="onFileChange($event)" formControlName="archivo">
</div> </div>
</form> </form>
</div> </div>
...@@ -50,7 +50,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit { ...@@ -50,7 +50,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10); this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.proyecto = this.mostrarOcultarService.editProyecto; this.proyecto = this.mostrarOcultarService.editProyecto;
this.cambio = false; this.cambio = false;
...@@ -72,6 +72,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit { ...@@ -72,6 +72,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
this.file = fileList[0]; this.file = fileList[0];
if (!this.validarArchivo(this.file)) { if (!this.validarArchivo(this.file)) {
this.openModalError('¡Por favor, selecciona un archivo PDF!'); this.openModalError('¡Por favor, selecciona un archivo PDF!');
this.archivoEsPDFValido = false;
return; return;
} else { } else {
this.archivoEsPDFValido = true; this.archivoEsPDFValido = true;
...@@ -85,10 +86,11 @@ export class ActaConsejoDepartamentoComponent implements OnInit { ...@@ -85,10 +86,11 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
} }
openModal() { openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, { const dialogRef = this.dialog.open(EnvioFormularioComponent, {
width: '400px', width: '400px',
disableClose: true disableClose: true,
data: { mensaje: mensaje }
}); });
dialogRef.afterClosed().subscribe(result => { dialogRef.afterClosed().subscribe(result => {
...@@ -97,14 +99,44 @@ export class ActaConsejoDepartamentoComponent implements OnInit { ...@@ -97,14 +99,44 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
} }
async onSubmit() { async onSubmit() {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado;
try {
const pdfData = await this.enviarPDF();
if (pdfData.idPDF === null || pdfData.idPDF === undefined) {
} else {
this.proyecto.uzytavproyec_aprob_con_dep_url = pdfData.idPDF;
this.proyecto.uzytavproyec_aprob_con_dep_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal('Acta de Consejo de Departamento Enviada');
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
}
);
}
} catch (error) {
// Manejo de error en el envío del PDF
}
}
}
/* async onSubmit() {
if (this.myForm.valid) { if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado; this.proyecto.uzytavproyec_id = this.idRecuperado;
const pdfData = await this.enviarPDF(); const pdfData = await this.enviarPDF();
if (pdfData.idPDF === null || pdfData.idPDF === undefined) {
} else {
this.proyecto.uzytavproyec_aprob_con_dep_url = pdfData.idPDF; this.proyecto.uzytavproyec_aprob_con_dep_url = pdfData.idPDF;
this.proyecto.uzytavproyec_aprob_con_dep_nom = pdfData.filename; this.proyecto.uzytavproyec_aprob_con_dep_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe( this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => { response => {
this.openModal(); this.openModal('Acta de Consejo de Departamento Enviada');
console.log('Datos Actualizados', this.proyecto); console.log('Datos Actualizados', this.proyecto);
this.myForm.disable(); this.myForm.disable();
this.cambio = false; this.cambio = false;
...@@ -114,6 +146,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit { ...@@ -114,6 +146,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
); );
} }
} }
}*/
async enviarPDF() { async enviarPDF() {
const formData = new FormData(); const formData = new FormData();
...@@ -127,7 +160,8 @@ export class ActaConsejoDepartamentoComponent implements OnInit { ...@@ -127,7 +160,8 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
filename: response.fileName filename: response.fileName
}; };
} catch (error) { } catch (error) {
this.openModalError('¡Este PDF ya se ha subido!'); this.openModalError('Este PDF ya se ha subido');
this.archivoEsPDFValido = false;
return { return {
idPDF: null, idPDF: null,
filename: '' filename: ''
......
...@@ -5,8 +5,7 @@ ...@@ -5,8 +5,7 @@
<div class="save-button"> <div class="save-button">
<button mat-raised-button color="primary" *ngIf="!cambio" <button mat-raised-button color="primary" *ngIf="!cambio"
(click)="cambiar()">Editar</button> (click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" *ngIf="cambio" <button mat-raised-button color="primary" *ngIf="cambio" [disabled]="myForm.invalid">Guardar</button>
>Guardar</button>
<span class="separator"></span> <span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio" <button mat-raised-button color="warn" *ngIf="cambio"
(click)="cancelado()">Cancelar</button> (click)="cancelado()">Cancelar</button>
...@@ -23,6 +22,9 @@ ...@@ -23,6 +22,9 @@
class="error-message"> class="error-message">
El contenido no puede exceder los 3000 caracteres. El contenido no puede exceder los 3000 caracteres.
</div> </div>
<div *ngIf="myForm.get('viabilidad').hasError('required') && (myForm.get('viabilidad').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div> </div>
<div class="editor-separator"></div> <div class="editor-separator"></div>
<div> <div>
...@@ -35,6 +37,9 @@ ...@@ -35,6 +37,9 @@
class="error-message"> class="error-message">
El contenido no puede exceder los 3000 caracteres. El contenido no puede exceder los 3000 caracteres.
</div> </div>
<div *ngIf="myForm.get('perderia').hasError('required') && (myForm.get('perderia').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div> </div>
<div class="editor-separator"></div> <div class="editor-separator"></div>
<div> <div>
...@@ -47,6 +52,9 @@ ...@@ -47,6 +52,9 @@
class="error-message"> class="error-message">
El contenido no puede exceder los 3000 caracteres. El contenido no puede exceder los 3000 caracteres.
</div> </div>
<div *ngIf="myForm.get('resultadoO').hasError('required') && (myForm.get('resultadoO').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div> </div>
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
......
...@@ -820,6 +820,5 @@ export class PdfComponent implements OnInit { ...@@ -820,6 +820,5 @@ export class PdfComponent implements OnInit {
} }
...@@ -68,7 +68,7 @@ export class ComisionEvaComponent implements OnInit { ...@@ -68,7 +68,7 @@ export class ComisionEvaComponent implements OnInit {
localStorage.setItem('comisionId',idcab.toString()); localStorage.setItem('comisionId',idcab.toString());
localStorage.setItem('parametrosId',idpara.toString()); localStorage.setItem('parametrosId',idpara.toString());
this.router.navigate(['main/Asignar-Comision']); this.router.navigate(['main/Asignar-Comision']);
this.openModal(); this.openModal('La Comisión de Evaluación ha sido Asignada');
}); });
} catch (error) { } catch (error) {
console.log(error); console.log(error);
...@@ -83,7 +83,7 @@ export class ComisionEvaComponent implements OnInit { ...@@ -83,7 +83,7 @@ export class ComisionEvaComponent implements OnInit {
}); });
this.paraS.obtenerParametrosInicial().subscribe(data => { this.paraS.obtenerParametrosInicial().subscribe(data => {
this.parametroA = data; this.parametroA = data.filter(item => item.uzytavconparaeva_estado === 'A');
}); });
this.proyecS.obtenerParametros().subscribe(data => { this.proyecS.obtenerParametros().subscribe(data => {
...@@ -115,10 +115,11 @@ export class ComisionEvaComponent implements OnInit { ...@@ -115,10 +115,11 @@ export class ComisionEvaComponent implements OnInit {
this.mostrarDiv[i] = !this.mostrarDiv[i]; this.mostrarDiv[i] = !this.mostrarDiv[i];
} }
openModal() { openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, { const dialogRef = this.dialog.open(EnvioFormularioComponent, {
width: '400px', width: '400px',
disableClose: true disableClose: true,
data: {mensaje: mensaje}
}); });
dialogRef.afterClosed().subscribe(result => { dialogRef.afterClosed().subscribe(result => {
......
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ConfirmarFinalizarComponent } from './confirmar-finalizar.component';
describe('ConfirmarFinalizarComponent', () => {
let component: ConfirmarFinalizarComponent;
let fixture: ComponentFixture<ConfirmarFinalizarComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ConfirmarFinalizarComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(ConfirmarFinalizarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'vex-confirmar-finalizar',
templateUrl: './confirmar-finalizar.component.html',
styleUrls: ['./confirmar-finalizar.component.css']
})
export class ConfirmarFinalizarComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment