validaciones y controles

parent 69f52ad1
......@@ -3,30 +3,30 @@
<!-- Información de la institución -->
<div class="save-button">
<button mat-raised-button color="primary" *ngIf="!cambio" (click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" *ngIf="cambio">Guardar</button>
<button mat-raised-button color="primary" [disabled]="!archivoEsPDFValido" *ngIf="cambio">Guardar</button>
<span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio" (click)="cancelado()">Cancelar</button>
</div>
</div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_com_part1_url == null && !cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
</div>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_com_part1_url == null && cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
</div>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
<button class="input-container" *ngIf="proyecto.uzytavproyec_com_part1_url != null && !cambio">
<img src="../../../../../../../assets/img/icons/pdf.png" style="width: 50px; height: 50px;"
(click)="verPDF(proyecto.uzytavproyec_com_part1_url,proyecto.uzytavproyec_com_part1_nom)"
aria-placeholder="Ver PDF">
<img src="../../../../../../../assets/img/icons/pdf.png" style="width: 50px; height: 50px;"
(click)="verPDF(proyecto.uzytavproyec_com_part1_url,proyecto.uzytavproyec_com_part1_nom)"
aria-placeholder="Ver PDF">Descargar PDF
</button>
<div class="input-container" *ngIf="proyecto.uzytavproyec_com_part1_url != null && cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
</form>
</div>
......@@ -15,6 +15,8 @@ import { Proyectos } from 'src/app/modules/main/Models/proyectos';
import { DatosEspeService } from 'src/app/modules/main/services/APIs Externas/Datos espe/datos-espe.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { saveAs } from 'file-saver';
import { ErroresComponent } from '../../../programa/opciones/errores/errores.component';
import { ErrorTextoComponent } from '../../errores/error-texto/error-texto.component';
@Component({
selector: 'app-acta-director-proyecto',
......@@ -22,7 +24,7 @@ import { saveAs } from 'file-saver';
styleUrls: ['./acta-director-proyecto.component.css']
})
export class ActaDirectorProyectoComponent implements OnInit {
archivoEsPDFValido: boolean = false;
myForm: FormGroup;
selectedFile: File | null = null;
file: File;
......@@ -48,7 +50,7 @@ export class ActaDirectorProyectoComponent implements OnInit {
}
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10);
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.proyecto = this.mostrarOcultarService.editProyecto;
this.cambio = false;
......@@ -68,14 +70,43 @@ export class ActaDirectorProyectoComponent implements OnInit {
const fileList: FileList = event.target.files;
if (fileList.length > 0) {
this.file = fileList[0];
if (!this.validarArchivo(this.file)) {
this.openModalError('¡Por favor, selecciona un archivo PDF!');
return;
} else {
this.archivoEsPDFValido = true;
}
}
}
validarArchivo(file: File): boolean {
const fileName = file.name;
return fileName.toLocaleLowerCase().endsWith('.pdf');
}
/*
onFileChange(event: any) {
// Obtener el archivo seleccionado
const fileList: FileList = event.target.files;
if (fileList.length > 0) {
const file = fileList[0];
const fileName = file.name;
if (!fileName.toLocaleLowerCase().endsWith('.pdf')) {
this.openModalError('¡Por favor, selecciona un archivo PDF!');
this.archivoEsPDFValido = false; // Establecer a false si no es un PDF
} else {
this.archivoEsPDFValido = true; // Establecer a true si es un PDF
// Continúa con el manejo del archivo si es un PDF
}
}
}
*/
openModal() {
openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
width: '400px',
disableClose: true
disableClose: true,
data: { mensaje: mensaje }
});
dialogRef.afterClosed().subscribe(result => {
......@@ -87,22 +118,24 @@ export class ActaDirectorProyectoComponent implements OnInit {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idRecuperado;
const pdfData = await this.enviarPDF();
this.proyecto.uzytavproyec_com_part1_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part1_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal();
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
console.log(error)
}
);
if (pdfData.idPDF !== null && pdfData.idPDF !== undefined) {
this.proyecto.uzytavproyec_com_part1_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part1_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal('El PDF ha sido Enviado');
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
}
);
}
}
}
async enviarPDF() {
const formData = new FormData();
formData.append('files', this.file);
......@@ -115,8 +148,11 @@ export class ActaDirectorProyectoComponent implements OnInit {
filename: response.fileName
};
} catch (error) {
console.error('Error al guardar el PDF en el servidor:', error);
throw error;
this.openModalError('¡Este PDF ya se ha subido!');
return {
idPDF: null,
filename: ''
};
}
}
......@@ -137,11 +173,15 @@ export class ActaDirectorProyectoComponent implements OnInit {
},
error => {
console.error('Error al obtener el PDF:', error);
return {
idPDF: null,
filename: null
};
}
);
}
getFilenameFromResponse(contentDispositionHeader: string | null): string {
if (contentDispositionHeader) {
const matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(contentDispositionHeader);
......@@ -151,7 +191,7 @@ export class ActaDirectorProyectoComponent implements OnInit {
}
return 'document.pdf'; // Nombre predeterminado si no se puede obtener el nombre del archivo
}
cambiar() {
this.cambio = true;
this.myForm.get('archivo').enable();
......@@ -160,4 +200,16 @@ export class ActaDirectorProyectoComponent implements OnInit {
this.cambio = false;
this.myForm.disable();
}
openModalError(texto: string) {
const dialogRef = this.dialog.open(ErrorTextoComponent, {
disableClose: true,
data: { mensaje: texto }
});
dialogRef.afterClosed().subscribe(result => {
console.log('La ventana modal se ha cerrado');
this.formularioEnviado = true;
});
}
}
......@@ -3,30 +3,30 @@
<!-- Información de la institución -->
<div class="save-button">
<button mat-raised-button color="primary" *ngIf="!cambio" (click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" *ngIf="cambio">Guardar</button>
<button mat-raised-button color="primary" [disabled]="!archivoEsPDFValido" *ngIf="cambio">Guardar</button>
<span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio" (click)="cancelado()">Cancelar</button>
</div>
</div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_com_part2_url == null && !cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
</div>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_com_part2_url == null && cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
</div>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
<button class="input-container" *ngIf="proyecto.uzytavproyec_com_part2_url != null && !cambio">
<img src="../../../../../../../assets/img/icons/pdf.png" style="width: 50px; height: 50px;"
(click)="verPDF(proyecto.uzytavproyec_com_part2_url,proyecto.uzytavproyec_com_part2_nom)"
aria-placeholder="Ver PDF">
<img src="../../../../../../../assets/img/icons/pdf.png" style="width: 50px; height: 50px;"
(click)="verPDF(proyecto.uzytavproyec_com_part2_url,proyecto.uzytavproyec_com_part2_nom)"
aria-placeholder="Ver PDF">Descargar PDF
</button>
<div class="input-container" *ngIf="proyecto.uzytavproyec_com_part2_url != null && cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
</form>
</div>
......@@ -15,6 +15,7 @@ import { Proyectos } from 'src/app/modules/main/Models/proyectos';
import { DatosEspeService } from 'src/app/modules/main/services/APIs Externas/Datos espe/datos-espe.service';
import { saveAs } from 'file-saver';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { ErrorTextoComponent } from '../../errores/error-texto/error-texto.component';
@Component({
selector: 'app-acta-compromiso-carreras',
......@@ -22,7 +23,7 @@ import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocu
styleUrls: ['./acta-compromiso-carreras.component.css']
})
export class ActaCompromisoCarrerasComponent implements OnInit {
archivoEsPDFValido: boolean = false;
myForm: FormGroup;
selectedFile: File | null = null;
file: File;
......@@ -67,9 +68,19 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
const fileList: FileList = event.target.files;
if (fileList.length > 0) {
this.file = fileList[0];
if (!this.validarArchivo(this.file)) {
this.openModalError('¡Por favor, selecciona un archivo PDF!');
return;
} else {
this.archivoEsPDFValido = true;
}
}
}
validarArchivo(file: File): boolean {
const fileName = file.name;
return fileName.toLocaleLowerCase().endsWith('.pdf');
}
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
......@@ -97,7 +108,6 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
this.cambio = false;
},
error => {
console.log(error)
}
);
}
......@@ -115,8 +125,11 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
filename: response.fileName
};
} catch (error) {
console.error('Error al guardar el PDF en el servidor:', error);
throw error;
this.openModalError('¡Este PDF ya se ha subido!');
return {
idPDF: null,
filename: ''
};
}
}
......@@ -158,4 +171,16 @@ export class ActaCompromisoCarrerasComponent implements OnInit {
this.myForm.disable();
}
openModalError(texto: string) {
const dialogRef = this.dialog.open(ErrorTextoComponent, {
disableClose: true,
data: { mensaje: texto }
});
dialogRef.afterClosed().subscribe(result => {
console.log('La ventana modal se ha cerrado');
this.formularioEnviado = true;
});
}
}
......@@ -3,30 +3,30 @@
<!-- Información de la institución -->
<div class="save-button">
<button mat-raised-button color="primary" *ngIf="!cambio" (click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" *ngIf="cambio">Guardar</button>
<button mat-raised-button color="primary" [disabled]="!archivoEsPDFValido" *ngIf="cambio">Guardar</button>
<span class="separator"></span>
<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">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
</div>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
<div class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url == null && cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
</div>
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
<button class="input-container" *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)"
aria-placeholder="Ver PDF">
<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)"
aria-placeholder="Ver PDF">Descargar PDF
</button>
<div class="input-container" *ngIf="proyecto.uzytavproyec_aprob_con_dep_url != null && cambio">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)" formControlName="archivo">
<input type="file" id="uzytavconvoca_digital" accept=".pdf" (change)="onFileChange($event)" formControlName="archivo">
</div>
</form>
</div>
......@@ -15,6 +15,7 @@ import { Proyectos } from 'src/app/modules/main/Models/proyectos';
import { DatosEspeService } from 'src/app/modules/main/services/APIs Externas/Datos espe/datos-espe.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { saveAs } from 'file-saver';
import { ErrorTextoComponent } from '../../errores/error-texto/error-texto.component';
@Component({
selector: 'app-acta-consejo-departamento',
......@@ -22,7 +23,7 @@ import { saveAs } from 'file-saver';
styleUrls: ['./acta-consejo-departamento.component.css']
})
export class ActaConsejoDepartamentoComponent implements OnInit {
archivoEsPDFValido: boolean = false;
myForm: FormGroup;
selectedFile: File | null = null;
file: File;
......@@ -69,9 +70,20 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
const fileList: FileList = event.target.files;
if (fileList.length > 0) {
this.file = fileList[0];
if (!this.validarArchivo(this.file)) {
this.openModalError('¡Por favor, selecciona un archivo PDF!');
return;
} else {
this.archivoEsPDFValido = true;
}
}
}
validarArchivo(file: File): boolean {
const fileName = file.name;
return fileName.toLocaleLowerCase().endsWith('.pdf');
}
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
......@@ -98,7 +110,6 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
this.cambio = false;
},
error => {
console.log(error)
}
);
}
......@@ -116,8 +127,11 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
filename: response.fileName
};
} catch (error) {
console.error('Error al guardar el PDF en el servidor:', error);
throw error;
this.openModalError('¡Este PDF ya se ha subido!');
return {
idPDF: null,
filename: ''
};
}
}
......@@ -142,7 +156,7 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
}
);
}
getFilenameFromResponse(contentDispositionHeader: string | null): string {
if (contentDispositionHeader) {
const matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(contentDispositionHeader);
......@@ -163,5 +177,17 @@ export class ActaConsejoDepartamentoComponent implements OnInit {
this.myForm.disable();
}
openModalError(texto: string) {
const dialogRef = this.dialog.open(ErrorTextoComponent, {
disableClose: true,
data: { mensaje: texto }
});
dialogRef.afterClosed().subscribe(result => {
console.log('La ventana modal se ha cerrado');
this.formularioEnviado = true;
});
}
}
......@@ -10,11 +10,11 @@
<div class="contenedor-dos" *ngIf="mostrarFormulario">
<!--formulario 1-->
<form class="formulario" [formGroup]="myForm" *ngIf="selectedOption !== 'Nacional'" (ngSubmit)="onSubmit()">
<form class="formulario" [formGroup]="myFormProvincia" *ngIf="selectedOption !== 'Nacional'" (ngSubmit)="onSubmit()">
<!--Boton para guardar-->
<div class="save-button" *ngIf="selectedOption === 'Provincial'">
<button mat-raised-button color="primary" [disabled]="myForm.invalid">Guardar</button>
<button mat-raised-button color="primary" [disabled]="myFormProvincia.invalid">Guardar</button>
</div>
<mat-form-field *ngIf="selectedOption === 'Provincial'" class="form-field">
......@@ -29,9 +29,9 @@
</form>
<!--Fomulario 2-->
<form class="formulario" [formGroup]="myForm" *ngIf="selectedOption !== 'Nacional'" (ngSubmit)="onSubmit2()">
<form class="formulario" [formGroup]="myFormCanton" *ngIf="selectedOption !== 'Nacional'" (ngSubmit)="onSubmit2()">
<div class="save-button" *ngIf="selectedOption === 'Cantonal'">
<button mat-raised-button color="primary" [disabled]="myForm.invalid">Guardar</button>
<button mat-raised-button color="primary" [disabled]="myFormCanton.invalid">Guardar</button>
</div>
<mat-form-field
*ngIf="selectedOption === 'Cantonal'"
......@@ -59,10 +59,10 @@
</mat-form-field>
</form>
<!--formulario 3-->
<form *ngIf="selectedOption !== 'Nacional'" class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit3()">
<form *ngIf="selectedOption !== 'Nacional'" class="formulario" [formGroup]="myFormParro" (ngSubmit)="onSubmit3()">
<div class="save-button" *ngIf="selectedOption === 'Parroquial'">
<button mat-raised-button color="primary" [disabled]="myForm.invalid">Guardar</button>
<button mat-raised-button color="primary" [disabled]="myFormParro.invalid">Guardar</button>
</div>
<mat-form-field *ngIf="selectedOption === 'Parroquial'" class="form-field">
<mat-label>Provincias</mat-label>
......
import { Component, EventEmitter, OnInit, Output } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog';
import { Canton } from 'src/app/modules/main/Models/Ubicaciones/canton';
import { Parroquia } from 'src/app/modules/main/Models/Ubicaciones/parroquia';
......@@ -22,7 +22,9 @@ import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_
export class CoberturaProyectoComponent implements OnInit {
selectedOption: string;
myForm: FormGroup;
myFormProvincia: FormGroup;
myFormCanton: FormGroup;
myFormParro: FormGroup;
provincia!: Provincia[];
selectedProvincia: string;
......@@ -56,10 +58,19 @@ export class CoberturaProyectoComponent implements OnInit {
private datosCompartidos: Actualiza_datosService
) {
this.formularioEnviado = false;
this.myForm = this.formBuilder.group({
provincia: [''],
cantones: [''],
parroquias: ['']
this.myFormProvincia = this.formBuilder.group({
provincia: ['', Validators.required]
});
this.myFormCanton = this.formBuilder.group({
provincia: ['', Validators.required],
cantones: ['',Validators.required]
});
this.myFormParro = this.formBuilder.group({
provincia: ['', Validators.required],
cantones: ['',Validators.required],
parroquias: ['',Validators.required]
});
}
......@@ -89,10 +100,10 @@ export class CoberturaProyectoComponent implements OnInit {
enviarSolicitud = false;
onSubmit() {
if (this.myForm.valid && !this.enviarSolicitud) {
if (this.myFormProvincia.valid && !this.enviarSolicitud) {
this.zonaM.uzytavproyec_id = this.idRecuparado;
console.log("back ",this.zonaM.uzytavproyec_id)
const provinciasSeleccionadas = this.myForm.value.provincia;
const provinciasSeleccionadas = this.myFormProvincia.value.provincia;
// Ejecutar todas las operaciones de guardado en paralelo
forkJoin(
......@@ -109,7 +120,7 @@ export class CoberturaProyectoComponent implements OnInit {
).subscribe(responses => {
console.log('Datos Enviados');
this.zonaS.parametrosActualizados.next();
this.openModal();
this.openModal('Se han agregado la(s) Provincia(s)');
this.formularioGuardado.emit();
this.datosCompartidos.actualizarDatos(this.zonaM);
});
......@@ -117,10 +128,10 @@ export class CoberturaProyectoComponent implements OnInit {
}
onSubmit2() {
if (this.myForm.valid && !this.enviarSolicitud) {
if (this.myFormCanton.valid && !this.enviarSolicitud) {
this.zonaM.uzytavproyec_id = this.idRecuparado;
console.log("back ",this.zonaM.uzytavproyec_id)
const cantonesSeleccionados = this.myForm.value.cantones;
const cantonesSeleccionados = this.myFormCanton.value.cantones;
forkJoin(
cantonesSeleccionados.map(canton => {
const zonaMCopia = {...this.zonaM};
......@@ -131,7 +142,7 @@ export class CoberturaProyectoComponent implements OnInit {
).subscribe(responses => {
console.log('Datos Enviados');
this.zonaS.parametrosActualizados.next();
this.openModal();
this.openModal('Se han agregado el/los Canton(es)');
this.formularioGuardado.emit();
this.datosCompartidos.actualizarDatos(this.zonaM);
});
......@@ -139,12 +150,12 @@ export class CoberturaProyectoComponent implements OnInit {
}
onSubmit3() {
if (this.myForm.valid) {
if (this.myFormParro.valid) {
this.zonaM.uzytavproyec_id = this.idRecuparado;
console.log("back ",this.zonaM.uzytavproyec_id)
const parroquiasSeleccionadas = this.myForm.value.parroquias;
const provinciaSeleccionada = this.myForm.value.provincia;
const parroquiasSeleccionadas = this.myFormParro.value.parroquias;
const provinciaSeleccionada = this.myFormParro.value.provincia;
console.log('pruea: ',parroquiasSeleccionadas);
forkJoin(
parroquiasSeleccionadas.map(parroquia => {
......@@ -157,8 +168,8 @@ export class CoberturaProyectoComponent implements OnInit {
).subscribe(responses => {
console.log('Datos Enviados');
this.zonaS.parametrosActualizados.next();
this.openModal();
this.myForm.reset();
this.openModal('Se han agregado la(s) Parroquia(s)');
this.myFormParro.reset();
this.formularioGuardado.emit();
this.datosCompartidos.actualizarDatos(this.zonaM);
});
......@@ -167,16 +178,19 @@ export class CoberturaProyectoComponent implements OnInit {
resetForm() {
this.myForm.reset();
this.myFormParro.reset();
this.myFormCanton.reset();
this.myFormProvincia.reset();
this.selectedProvincia = null;
this.selectedCanton = null;
this.selectedParroquiaId = null;
}
//Abrir la ventana modal para actuaizar y mostrar.
openModal() {
openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true
disableClose: true,
data: {mensaje: mensaje}
});
dialogRef.afterClosed().subscribe(result => {
......
......@@ -3,7 +3,7 @@
.form-row {
display: flex;
}
.form-column {
flex: 1;
margin: 0 10px;
......@@ -27,16 +27,20 @@
.example-radio-button {
margin: 5px;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.form-column mat-form-field {
display: block;
margin-bottom: 16px;
width: 100%;
}
\ No newline at end of file
.estilo-edi {
background-color: white;
color: #5bb02c;
}
......@@ -16,10 +16,11 @@
{{ programa.uzytavprograma_vnombre }}
</mat-option>
</mat-select>
<mat-error *ngIf="myForm.get('programa').invalid && (myForm.get('programa').dirty
<mat-error *ngIf="myForm.get('programa').invalid && (myForm.get('programa').dirty
|| myForm.get('programa').touched)">
Por favor, ingrese un programa.
</mat-error>
<mat-icon matSuffix matTooltip="Seleccione el programa al cual se va enlazar el proyecto" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<div class="form-row">
<div class="form-column">
......@@ -30,9 +31,10 @@
<input matInput formControlName="codigo">
</mat-form-field>
<mat-form-field>
<mat-label>Nombre</mat-label>
<input matInput placeholder="Nombre del Proyecto" formControlName="nombreP">
<mat-icon matSuffix matTooltip="Nombre del Proyecto Postulante" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
......@@ -44,18 +46,18 @@
<mat-label>Departamento</mat-label>
<input matInput formControlName="departamento" [value]="(usuario.departamento$ | async)">
</mat-form-field>
<mat-form-field>
<mat-label>Seleccionar Carrera</mat-label>
<mat-select [(value)]="selectedCarreraId" formControlName="carrera">
<mat-select [(value)]="selectedCarreraId" formControlName="carrera">
<mat-option *ngFor="let carrera of carrera" [value]="carrera.codigo_CARRERA">
{{ carrera.nombre_CARRERA }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field class="form-field">
<mat-label>Población Beneficiada</mat-label>
<mat-select formControlName="poblacion" multiple>
......@@ -125,4 +127,4 @@
<ng-container *ngIf="guardarFormulario">
<app-edit-datos-generales-proyecto ></app-edit-datos-generales-proyecto>
</ng-container>
\ No newline at end of file
</ng-container>
......@@ -19,7 +19,7 @@
</mat-option>
</mat-select>
<mat-error *ngIf="myForm.get('programa').invalid && (myForm.get('programa').dirty
<mat-error *ngIf="myForm.get('programa').invalid && (myForm.get('programa').dirty
|| myForm.get('programa').touched)">
Por favor, ingrese un programa.
</mat-error>
......@@ -38,6 +38,7 @@
<mat-form-field>
<mat-label>Nombre</mat-label>
<input matInput placeholder="Nombre del Proyecto" formControlName="nombreP">
<mat-icon matSuffix matTooltip="Nombre del Proyecto Postulante" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
......@@ -64,7 +65,7 @@
Por favor, ingrese una carrera.
</mat-error>
</mat-form-field>
<mat-form-field class="form-field">
......@@ -74,7 +75,7 @@
{{ poblacion.uzytavpobla_tipo }}
</mat-option>
</mat-select>
<mat-error *ngIf="myForm.get('poblacion').invalid && (myForm.get('poblacion').dirty
<mat-error *ngIf="myForm.get('poblacion').invalid && (myForm.get('poblacion').dirty
|| myForm.get('poblacion').touched)">
Por favor, ingrese una población.
</mat-error>
......@@ -98,7 +99,7 @@
<input matInput [matDatepicker]="pickerInicio" formControlName="fechaIni">
<mat-datepicker-toggle matSuffix [for]="pickerInicio"></mat-datepicker-toggle>
<mat-datepicker #pickerInicio></mat-datepicker>
<mat-error *ngIf="myForm.get('fechaIni').invalid && (myForm.get('fechaIni').dirty
<mat-error *ngIf="myForm.get('fechaIni').invalid && (myForm.get('fechaIni').dirty
|| myForm.get('fechaIni').touched)">
Por favor, ingrese una fecha.
</mat-error>
......@@ -141,7 +142,7 @@
<input matInput [matDatepicker]="pickerFin" formControlName="fechaFin">
<mat-datepicker-toggle matSuffix [for]="pickerFin"></mat-datepicker-toggle>
<mat-datepicker #pickerFin></mat-datepicker>
<mat-error *ngIf="myForm.get('fechaFin').invalid && (myForm.get('fechaFin').dirty
<mat-error *ngIf="myForm.get('fechaFin').invalid && (myForm.get('fechaFin').dirty
|| myForm.get('fechaFin').touched)">
Por favor, ingrese una fecha.
</mat-error>
......@@ -153,4 +154,4 @@
</mat-card-content>
</mat-card>
</form>
</div>
\ No newline at end of file
</div>
......@@ -29,3 +29,7 @@
font-size: 14px;
margin-top: 5px;
}
.estilo-edi {
background-color: white;
color: #5bb02c;
}
<div class="container">
<form class="example-form" [formGroup]="myForm" (ngSubmit)="onSubmit()" >
<form class="example-form" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<mat-card>
<mat-card-header>
<div class="save-button">
<button mat-raised-button color="primary" *ngIf="!cambio"
(click)="cambiar()">Editar</button>
<button mat-raised-button color="primary" *ngIf="cambio"
>Guardar</button>
[disabled]="myForm.invalid">Guardar</button>
<span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio"
(click)="cancelado()">Cancelar</button>
......@@ -16,20 +16,30 @@
<div>
<label class="label-negrita"> Bienes:</label>
<ckeditor formControlName="bienes" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
<ckeditor formControlName="bienes" class="custom-ckeditor"
[disabled]="!isEditorEnabled" [style.height]="editorHeight"
[editor]="Editor"></ckeditor>
<div *ngIf="myForm.get('bienes').hasError('maxlength')"
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
<div *ngIf="myForm.get('bienes').hasError('required') && (myForm.get('bienes').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div>
<div class="editor-separator"></div>
<div>
<label class="label-negrita"> Servicos:</label>
<ckeditor formControlName="servicios" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
<ckeditor formControlName="servicios" class="custom-ckeditor"
[disabled]="!isEditorEnabled" [style.height]="editorHeight"
[editor]="Editor"></ckeditor>
<div *ngIf="myForm.get('servicios').hasError('maxlength')"
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
<div *ngIf="myForm.get('servicios').hasError('required') && (myForm.get('servicios').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div>
</mat-card-content>
......
......@@ -28,7 +28,7 @@ export class EditEntregablesComponent implements OnInit {
private compartiId: Compartir_idService,
private mostrarOcultarService: MostrarOcultarService,
private dialog: MatDialog
) {}
) { }
cambiar() {
this.cambio = true;
......@@ -38,10 +38,19 @@ export class EditEntregablesComponent implements OnInit {
cancelado() {
this.cambio = false;
this.isEditorEnabled = false;
this.myForm.get('bienes').setValue('');
this.myForm.get('servicios').setValue('');
this.myForm.get('bienes').markAsPristine();
this.myForm.get('bienes').markAsUntouched();
this.myForm.get('servicios').markAsPristine()
this.myForm.get('servicios').markAsUntouched();
}
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10);
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.proyectos = new Proyectos();
this.obtenerRegistros();
......@@ -73,7 +82,7 @@ export class EditEntregablesComponent implements OnInit {
this.proyectosService.modificarParametros(this.idRecuperado, this.proyectos).subscribe(response => {
this.cambio = false;
this.isEditorEnabled = false;
this.openModal();
this.openModal('Se han enviado los Entregables del Proyecto');
});
} catch (error) {
......@@ -82,9 +91,10 @@ export class EditEntregablesComponent implements OnInit {
}
}
openModal() {
openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true
disableClose: true,
data: {mensaje: mensaje}
});
dialogRef.afterClosed().subscribe(result => {
......
......@@ -24,7 +24,7 @@
<!-- Control de PDF -->
<div class="input-container">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)"
<input type="file" id="uzytavconvoca_digital" accept="image/*" (change)="onFileChange($event)"
formControlName="archivo">
</div>
......
......@@ -23,6 +23,9 @@
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
<div *ngIf="myForm.get('diagnostico').hasError('required') && (myForm.get('diagnostico').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div>
<div class="editor-separator"></div>
<div>
......@@ -31,10 +34,13 @@
<ckeditor formControlName="identificacion"
[style.height]="editorHeight" [disabled]="!isEditorEnabled"
[editor]="Editor"></ckeditor>
<div *ngIf="myForm.get('identificacion').hasError('maxlength')"
<div *ngIf="myForm.get('identificacion').hasError('maxlength')"
class="error-message">
El contenido no puede exceder los 3000 caracteres.
</div>
<div *ngIf="myForm.get('identificacion').hasError('required') && (myForm.get('identificacion').touched || myForm.dirty)" class="error-message">
Este campo es requerido.
</div>
</div>
</mat-card-content>
......
......@@ -40,6 +40,15 @@ export class EditDiagnosticoComponent implements OnInit {
cancelado() {
this.cambio = false;
this.isEditorEnabled = false;
this.myForm.get('diagnostico').setValue('');
this.myForm.get('identificacion').setValue('');
this.myForm.get('diagnostico').markAsPristine();
this.myForm.get('diagnostico').markAsUntouched();
this.myForm.get('identificacion').markAsPristine()
this.myForm.get('identificacion').markAsUntouched();
}
ngOnInit(): void {
......@@ -76,7 +85,7 @@ export class EditDiagnosticoComponent implements OnInit {
this.proyectosService.modificarParametros(this.idRecuperado, this.proyectos).subscribe(response => {
this.cambio = false;
this.isEditorEnabled = false;
this.openModal();
this.openModal('Se ha enviado el Diagnostico y Problema del Proyecto');
});
} catch (error) {
console.error('Error al enviar los datos:', error);
......@@ -84,9 +93,10 @@ export class EditDiagnosticoComponent implements OnInit {
}
}
openModal() {
openModal(mensaje: string) {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true
disableClose: true,
data: {mensaje: mensaje}
});
dialogRef.afterClosed().subscribe(result => {
......
......@@ -33,7 +33,7 @@
}
.modal-content button {
background-color: #2196f3;
background-color: #e03535;
color: white;
border: none;
padding: 10px 20px;
......@@ -42,5 +42,5 @@
}
.modal-content button:hover {
background-color: #0c7cd5;
background-color: #ea5656;
}
<div class="modal">
<div class="modal-content">
<p>
La información excede el maximo de caracteres</p>
{{mensaje}}</p>
<button mat-button (click)="closeModal()">Cerrar</button>
</div>
</div>
import { Component, OnInit } from '@angular/core';
import { MatDialogRef } from '@angular/material/dialog';
import { Component, Inject, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
@Component({
selector: 'vex-error-texto',
......@@ -8,11 +8,14 @@ import { MatDialogRef } from '@angular/material/dialog';
})
export class ErrorTextoComponent implements OnInit {
formularioEnviado = true;
mensaje:string;
constructor(
private dialogRef: MatDialogRef<ErrorTextoComponent>
) { }
private dialogRef: MatDialogRef<ErrorTextoComponent>,
@Inject(MAT_DIALOG_DATA) public data: any
) {this.mensaje = data.mensaje; }
ngOnInit(): void {
}
closeModal() {
......
......@@ -23,7 +23,7 @@ export class ConvocatoriasAgregarComponent implements OnInit {
enviarSolicitud = false;
checkboxValue: string;
formularioEnviado: boolean;
archivoEsPDFValido: boolean = false;
constructor(
private formBuilder: FormBuilder,
private router: Router,
......@@ -79,9 +79,20 @@ export class ConvocatoriasAgregarComponent implements OnInit {
const fileList: FileList = event.target.files;
if (fileList.length > 0) {
this.file = fileList[0];
if (!this.validarArchivo(this.file)) {
this.openModalError('¡Por favor, selecciona un archivo PDF!');
return;
} else {
this.archivoEsPDFValido = true;
}
}
}
validarArchivo(file: File): boolean {
const fileName = file.name;
return fileName.toLocaleLowerCase().endsWith('.pdf');
}
async enviarPDF() {
const formData = new FormData();
formData.append('files', this.file);
......@@ -95,7 +106,10 @@ export class ConvocatoriasAgregarComponent implements OnInit {
};
} catch (error) {
this.openModalError('¡Ya existe un Documento con ese Nombre! \n Ingrese Datos Nuevamente');
return {
idPDF: null,
filename: ''
};
}
}
......@@ -124,7 +138,6 @@ export class ConvocatoriasAgregarComponent implements OnInit {
this.router.navigate(['main/Convocatorias']);
},
error => {
console.log(error)
this.openModalError('Ya existe una Convocatoria Activa');
//this.router.navigate(['main/Convocatorias']);
}
......
<div class="modal">
<div class="modal-content">
<p>
Su información ha sido enviada con éxito.</p>
{{mensaje}}</p>
<button mat-button (click)="closeModal()">Cerrar</button>
</div>
</div>
import { Component, OnInit } from '@angular/core';
import { MatDialogRef } from '@angular/material/dialog';
import { Component, Inject, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
@Component({
selector: 'vex-envio-formulario',
......@@ -8,11 +8,14 @@ import { MatDialogRef } from '@angular/material/dialog';
})
export class EnvioFormularioComponent implements OnInit {
formularioEnviado = true;
mensaje: string;
constructor(
private dialogRef: MatDialogRef<EnvioFormularioComponent>
private dialogRef: MatDialogRef<EnvioFormularioComponent>,
@Inject(MAT_DIALOG_DATA) private data: {mensaje: string}
) { }
ngOnInit(): void {
this.mensaje = this.data.mensaje;
}
closeModal() {
......
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