validaciones y controles

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