Arreglos de validaciones

parent ac795386
......@@ -6,29 +6,27 @@ import { Injectable } from '@angular/core';
export class AuthorizationService {
private userEmail: string[] = [];
private perfiles: string[] = [];
setUserEmail(email: string[]) {
this.userEmail = email;
console.log('User email set:', this.userEmail);
}
setperfiles(perfiles: string[]) {
this.perfiles = perfiles;
console.log('User email set:', this.perfiles);
}
hasAccess(requiredEmail: string[]): boolean {
console.log('Required email:', requiredEmail);
console.log('User email:', this.userEmail);
return requiredEmail.some(email => this.userEmail.includes(email));
}
hasAccessPerfiles(requiredPerfil: string[]): boolean {
console.log('Required email:', requiredPerfil);
console.log('User email:', this.perfiles);
return requiredPerfil.some(perfiles => this.perfiles.includes(perfiles));
}
}
......@@ -60,8 +60,6 @@ export class AuthService {
}
get email(): string {
console.log("this.oAuthService.getIdentityClaims()['email']", this.oAuthService.getIdentityClaims()['email'])
return this.oAuthService.getIdentityClaims()['email'];
}
......@@ -133,7 +131,6 @@ private getUserProfiles(email: string) {
(profiles: string[]) => {
this.setGlobalUserProfiles(profiles); // Actualiza los perfiles del usuario
this.isUiEnabled = true; // Habilitar la interfaz una vez que se completó la verificación
console.log('Perfiles del usuario:', profiles);
},
(error) => {
......
......@@ -123,7 +123,7 @@ const routes: Routes = [
{ path: 'editar-proyecto/:id', component: EditProyectoComponent, canActivate:[AuthGuard], data: { requiredEmails: ['jacaceres1@espe.edu.ec', 'jamolina13@espe.edu.ec', 'aczambrano3@espe.edu.ec', 'jvzambrano4@espe.edu.ec'] } },
{ path: 'ListaProyectos', component: ListaProyectosComponent , canActivate:[AuthGuard], data: { requiredEmails: ['jacaceres1@espe.edu.ec', 'jamolina13@espe.edu.ec', 'aczambrano3@espe.edu.ec', 'jvzambrano4@espe.edu.ec'] } },
{ path: 'Proyecto', component: ProyectoComponent , canActivate:[AuthGuard], data: { requiredEmails: ['jacaceres1@espe.edu.ec', 'jamolina13@espe.edu.ec', 'aczambrano3@espe.edu.ec', 'jvzambrano4@espe.edu.ec'] } },
{ path: 'editar-proyecto', component: EditProyectoComponent, canActivate:[AuthGuard], data: { requiredEmails: ['jacaceres1@espe.edu.ec', 'jamolina13@espe.edu.ec', 'aczambrano3@espe.edu.ec', 'jvzambrano4@espe.edu.ec'] } },
//-----------------Usuarios--------------------
//Usuarios
......
......@@ -230,6 +230,8 @@ import { AsignacionDocentesComponent } from './pages/Proyectos/Inicio Ejecución
import { AddCalificacionVinculacionComponent } from './pages/Calificacion Comision Vinculacion/add-calificacion-vinculacion/add-calificacion-vinculacion.component';
import { AccesoDenegadoComponent } from './pages/programa/opciones/AccesoDenegado/AccesoDenegado.component';
import { AccesoNoAutorizadoComponent } from './pages/programa/opciones/AccesoNoAutorizado/AccesoNoAutorizado.component';
import { ErroresComponent } from './pages/programa/opciones/errores/errores.component';
import { MatTooltipModule } from '@angular/material/tooltip';
@NgModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
declarations: [
......@@ -407,9 +409,11 @@ import { AccesoNoAutorizadoComponent } from './pages/programa/opciones/AccesoNoA
DesignarEvaluadorComponent,
ListarDocentesAsignadosComponent,
AccesoDenegadoComponent,
AccesoNoAutorizadoComponent
AccesoNoAutorizadoComponent,
ErroresComponent
],
imports: [
MatTooltipModule,
MatTreeModule,
CKEditorModule,
FullCalendarModule,
......
......@@ -24,7 +24,7 @@
<div class="tope">
<div class="card-grid">
<div class="card" *ngFor="let linea of lineas">
<mat-card>
<mat-card (click)="getLinea(linea.uzytavlineaoperativa_DESCRIP)">
<img
mat-card-image
[src]="getImagen(linea.uzytavlineaoperativa_DESCRIP)" />
......
......@@ -51,4 +51,27 @@ export class LineasComponent implements OnInit {
return '';
}
}
getLinea(nombre: string){
switch (nombre) {
case 'Proyecto Social':
return this.router.navigate(['main/ListaProyectos']);
case 'Prácticas Preprofesionales ':
return this.router.navigate(['main/ListaProyectos']);
case 'Divulgación y resultados de aplicación C&C':
return this.router.navigate(['main/ListaProyectos']);
case 'Innovación Social y Abierta':
return this.router.navigate(['main/ListaProyectos']);
case 'Transferencia de Conocimiento y Tecnología':
return this.router.navigate(['main/ListaProyectos']);
case 'Consultoría y Servicios Especializados':
return this.router.navigate(['main/ListaProyectos']);
case 'Emprendimiento':
return this.router.navigate(['main/ListaProyectos']);
case 'Educación Continua':
return this.router.navigate(['main/ListaProyectos']);
default:
return '';
}
}
}
......@@ -308,3 +308,9 @@ button:hover {
flex-direction: column;
margin-bottom: 16px;
}
.estilo-edi {
background-color: white;
color: #5bb02c;
}
......@@ -39,7 +39,8 @@
myForm.get('objetivos').touched)">
Por favor, ingrese un objetivo.
</mat-error>
<mat-icon matSuffix matTooltip="Ingrese el Objetivo el cual corresponde a cada opción" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
</div>
</div>
</form>
\ No newline at end of file
</form>
<div class="container">
<div class="area-busqueda">
<mat-radio-group [(ngModel)]="selectedOption" (ngModelChange)="resetForm()">
<mat-radio-button value="Nacional">Nacional</mat-radio-button>
<!--<mat-radio-button value="Nacional">Nacional</mat-radio-button>-->
<mat-radio-button value="Provincial">Provincial</mat-radio-button>
<mat-radio-button value="Cantonal">Cantonal</mat-radio-button>
<mat-radio-button value="Parroquial">Parroquial</mat-radio-button>
......
......@@ -464,6 +464,19 @@
</mat-panel-title>
</mat-expansion-panel-header>
<mat-expansion-panel (opened)="contraccion = true"
(closed)="contraccion = false">
<mat-expansion-panel-header>
<mat-panel-title>
<mat-icon
[ngClass]="{'expanded': contraccion, 'collapsed': !contraccion}">keyboard_arrow_right</mat-icon>
1.- Asignación Comisión de Evaluación
</mat-panel-title>
</mat-expansion-panel-header>
<vex-comision-eva></vex-comision-eva>
<!--fin-->
</mat-expansion-panel>
<!--Resultados del proyecto-->
<mat-expansion-panel (opened)="contraccion = true"
(closed)="contraccion = false">
......
......@@ -793,18 +793,20 @@ export class PdfComponent implements OnInit {
pagesplit: true,
};
let pdf = new jsPDF('p', 'mm', 'a4', 5); // A4 size page of PDF
let pdf = new jsPDF('p', 'mm', 'a4', true); // A4 size page of PDF
var position = 5;
var marginLeft = 10;
var marginTop = 10;
var positon = marginTop;
var width = pdf.internal.pageSize.width;
var height = pdf.internal.pageSize.height;
pdf.addImage(contentDataURL, 'PNG', 5, position, imgWidth, imgHeight, options)
pdf.addImage(contentDataURL, 'PNG', 5, position, imgWidth, imgHeight, options);
pdf.addImage(contentDataURL, 'PNG', marginLeft, positon, imgWidth, imgHeight, options)
pdf.addImage(contentDataURL, 'PNG', marginLeft, positon, imgWidth, imgHeight, options);
heightLeft -= pageHeight;
while (heightLeft >= 0) {
position = heightLeft - imgHeight;
positon = heightLeft - imgHeight;
pdf.addPage();
pdf.addImage(contentDataURL, 'PNG', 5, position, imgWidth, imgHeight, options);
pdf.addImage(contentDataURL, 'PNG', marginLeft, positon, imgWidth, imgHeight, options);
heightLeft -= pageHeight;
}
......
......@@ -20,7 +20,6 @@ export class AddOjetivosBnComponent implements OnInit {
private objS: ObjetivosPLNBVService
) {
this.myForm = this.formBuilder.group({
// Define los campos y validaciones para el formulario 1
tipo: ['Objetivo'],
padre: [null],
descrip: ['']
......@@ -37,9 +36,14 @@ export class AddOjetivosBnComponent implements OnInit {
if (this.myForm.valid && !this.enviarSolicitud) {
try {
this.enviarSolicitud = true;
this.objM.uzytavobjetivo_b_vivirdescripcion = this.myForm.value.descrip;
//envio
if( this.myForm.value.tipo === 'Objetivo'){
this.objM.uzytavobjetivo_b_vivirdescripcion = this.myForm.value.descrip;
}else if(this.myForm.value.tipo === 'Politicas'){
this.objM.uzytavobjetivo_b_vivirdescripcion = this.myForm.value.descrip;
this.objM.objetivo_b_vivirPadre = this.myForm.value.padre;
}
this.objS.guardarParametros(this.objM).subscribe(() => {
console.log('Datos enviados');
this.objS.parametrosActualizados.next();
......
/* Estilos globales */
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap');
@import url('https://fonts.googleapis.com/icon?family=Material+Icons');
/* Contenedor principal */
.contenedor {
width: 96%;
margin: 10px auto;
border-radius: 10px;
background-color: white;
position: relative;
z-index: 1;
padding: 20px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Encabezado sobrepuesto */
.sobremontado {
position: relative;
display: flex;
align-items: center;
justify-content: center;
background-color: rgb(71, 127, 75);
color: #fff;
text-align: center;
padding: 10px;
box-sizing: border-box;
border-radius: 10px 10px 0 0;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
margin-bottom: 20px;
}
/* Icono en el encabezado */
.icono-instituciones {
font-size: 20px;
margin-right: 5px;
cursor: pointer;
}
/* Botón de volver */
.volver {
position: absolute;
top: 50%;
right: 10px;
transform: translateY(-50%);
border-radius: 50%;
background-color: white;
display: flex;
color: rgb(71, 127, 75);
align-items: center;
justify-content: center;
padding: 0;
width: 32px;
height: 32px;
border: none;
outline: none;
cursor: pointer;
}
/* Formulario */
.formulario {
display: flex;
flex-direction: column;
align-items: center;
}
.form-field {
width: 100%;
margin-bottom: 20px;
}
/* Tabla */
table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
font-family: 'Roboto', sans-serif;
color: #333;
}
table th,
table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #e0e0e0;
}
table th {
background-color: rgb(248, 249, 250);
font-weight: bolder;
text-transform: uppercase;
color: black;
}
table td {
position: relative;
}
table td::after {
content: "";
position: absolute;
bottom: -1px;
left: 0;
width: 100%;
height: 1px;
background-color: #e0e0e0;
}
/* Inputs de texto */
input[type="text"] {
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 5px;
}
/* Botón de enviar */
button {
margin-top: 10px;
}
/* Estilos específicos para móviles */
@media (max-width: 768px) {
.volver {
width: 28px;
height: 28px;
}
}
<p>edit-ojetivos-bn works!</p>
<link
href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap"
rel="stylesheet" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet" />
<div class="contenedor">
<div class="sobremontado">
<span class="icono-instituciones material-icons">new_label</span>
Agregar Partida Presupuestaria
<button class="volver" (click)="volver()">
<mat-icon>keyboard_arrow_left</mat-icon>
</button>
</div>
<div class="contenedor-dos">
<div class="centered-container">
</div>
<form [formGroup]="myForm" (ngSubmit)="onSubmit()" class="formulario">
<mat-form-field class="form-field">
<mat-label>Descripción del Objetivo</mat-label>
<input matInput formControlName="descrip" required>
</mat-form-field>
<button mat-raised-button color="primary" [disabled]="myForm.invalid">Enviar</button>
</form>
</div>
</div>
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { Router } from '@angular/router';
import { objetivosBV } from 'src/app/modules/main/Models/objetivoPLNBV';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { ObjetivosPLNBVService } from 'src/app/modules/main/services/objetivosPLNBV/objetivos-plnbv.service';
@Component({
selector: 'vex-edit-ojetivos-bn',
......@@ -6,10 +11,48 @@ import { Component, OnInit } from '@angular/core';
styleUrls: ['./edit-ojetivos-bn.component.css']
})
export class EditOjetivosBnComponent implements OnInit {
myForm: FormGroup;
obj!: objetivosBV[];
constructor() { }
constructor(
private formBuilder: FormBuilder,
private router: Router,
private objM: objetivosBV,
private objS: ObjetivosPLNBVService,
private mostrarOcultarService: MostrarOcultarService
) {
this.myForm = this.formBuilder.group({
descrip: ['']
});
}
ngOnInit(): void {
}
enviarSolicitud = false;
onSubmit() {
if (this.myForm.valid && !this.enviarSolicitud) {
try {
this.enviarSolicitud = true;
this.objM.uzytavobjetivo_b_vivirdescripcion = this.myForm.value.descrip;
this.objM.uzytavobjetivo_b_vivirdescripcion = this.myForm.value.descrip;
this.objM.objetivo_b_vivirPadre = this.myForm.value.padre;
this.objS.guardarParametros(this.objM).subscribe(() => {
console.log('Datos enviados');
this.objS.parametrosActualizados.next();
this.router.navigate(['main/ObjetivosPLNBV']);
});
} catch (error) {
console.error('Error al guardar un Objetivo', error);
}
}
}
volver() {
this.router.navigate(['main/ObjetivosPLNBV']);
}
}
......@@ -71,7 +71,7 @@
<div>
<!-- Editar -->
<button>
<mat-icon class="azul" (click)="editar(dato.uzytavclaspre_id)">edit</mat-icon>
<mat-icon class="azul" (click)="editar(dato.uzytavobjetivo_b_vivir_id)">edit</mat-icon>
</button>
<!-- Eliminar -->
</div>
......
......@@ -82,7 +82,7 @@ export class OjetivosBnComponent implements OnInit {
const registroSeleccionado = this.obj.find(
obj => obj.uzytavobjetivo_b_vivir_id === id
);
console.log('id', id)
this.mostrarOcultarService.editarObPlan = registroSeleccionado;
this.router.navigate(['main/Edit-Objetivo', id]);
}
......
......@@ -85,7 +85,7 @@
</mat-card-content>
</mat-card>
</div>
<div class="card" (click)="catalogoGeneral()">
<mat-card>
<img mat-card-image style="margin-top: 2px;"
......
......@@ -49,7 +49,7 @@
<div class="input-container">
<mat-form-field>
<mat-label>Fecha Fin:</mat-label>
<input matInput [matDatepicker]="pickerFin" placeholder="Seleccione una fecha de Fin"
<input matInput [matDatepicker]="pickerFin" placeholder="Seleccione una fecha de Fin"
formControlName="fechaFin" required
[(ngModel)]="convocatoria.uzytavconvoca_fecha_fin">
<mat-datepicker-toggle matSuffix [for]="pickerFin"></mat-datepicker-toggle>
......@@ -68,11 +68,11 @@
<!-- Control de PDF -->
<div class="input-container">
<label>Archivo PDF</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>
<button mat-raised-button color="primary" [disabled]="myForm.invalid" (click)="onSubmit()">Enviar</button>
</div>
</form>
</div>
</div>
\ No newline at end of file
</div>
......@@ -6,6 +6,8 @@ import { ConvocatoriaService } from '../../../services/convocatoria/convocatoria
import { ActualizarAnexosService } from '../../../services/actualizar_anexos/actualizar-anexos.service';
import { Actualiza_datosService } from '../../../services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from '../../../services/compartir_id/compartir_id.service';
import { MatDialog } from '@angular/material/dialog';
import { ErroresComponent } from '../../programa/opciones/errores/errores.component';
@Component({
selector: 'vex-convocatorias-agregar',
......@@ -20,6 +22,7 @@ export class ConvocatoriasAgregarComponent implements OnInit {
convocatoria: Convocatoria = {};
enviarSolicitud = false;
checkboxValue: string;
formularioEnviado: boolean;
constructor(
private formBuilder: FormBuilder,
......@@ -27,6 +30,7 @@ export class ConvocatoriasAgregarComponent implements OnInit {
private convocatoriaService: ConvocatoriaService,
private actualizarAnexosService: ActualizarAnexosService,
private datosCompartidos: Actualiza_datosService,
private dialog: MatDialog
) {
this.formulario = this.formBuilder.group({
nombre: ['', Validators.required],
......@@ -82,7 +86,7 @@ export class ConvocatoriasAgregarComponent implements OnInit {
const formData = new FormData();
formData.append('files', this.file);
formData.append('sistema', 'vinculacion');
try {
const response = await this.convocatoriaService.saveDocument(formData);
return {
......@@ -90,37 +94,54 @@ export class ConvocatoriasAgregarComponent implements OnInit {
filename: response.fileName
};
} catch (error) {
console.error('Error al guardar el PDF en el servidor:', error);
throw error;
this.openModalError('¡Ya existe un Documento con ese Nombre! \n Ingrese Datos Nuevamente');
}
}
async onSubmit() {
this.verificarCheckbox();
if (this.myForm.valid && !this.enviarSolicitud) {
this.enviarSolicitud = true;
const pdfData = await this.enviarPDF();
this.convocatoria.uzytavconvoca_id_file = pdfData.idPDF;
this.convocatoria.uzytavconvoca_digital_nombre = pdfData.filename;
this.convocatoria.uzytavconvoca_estado = this.checkboxValue;
this.convocatoria.uzytavconvoca_nombre = this.myForm.value.nombre;
this.convocatoria.uzytavconvoca_observacion = this.myForm.value.descripcion;
this.convocatoria.uzytavconvoca_fecha_inicio = this.myForm.value.fechaInicio;
this.convocatoria.uzytavconvoca_fecha_fin = this.myForm.value.fechaFin;
this.convocatoriaService.guardarConvocatoria(this.convocatoria).subscribe(
response => {
this.datosCompartidos.actualizarDatos(this.convocatoria);
this.actualizarAnexosService.actualizarDatos(this.file);
this.router.navigate(['main/Convocatorias']);
},
error => {
console.log(error);
//this.router.navigate(['main/Convocatorias']);
}
);
if (pdfData === null || pdfData === undefined) {
//this.openModalError('¡No se completo la Solicitud!');
} else {
this.convocatoria.uzytavconvoca_id_file = pdfData.idPDF;
this.convocatoria.uzytavconvoca_digital_nombre = pdfData.filename;
this.convocatoria.uzytavconvoca_estado = this.checkboxValue;
this.convocatoria.uzytavconvoca_nombre = this.myForm.value.nombre;
this.convocatoria.uzytavconvoca_observacion = this.myForm.value.descripcion;
this.convocatoria.uzytavconvoca_fecha_inicio = this.myForm.value.fechaInicio;
this.convocatoria.uzytavconvoca_fecha_fin = this.myForm.value.fechaFin;
this.convocatoriaService.guardarConvocatoria(this.convocatoria).subscribe(
response => {
this.datosCompartidos.actualizarDatos(this.convocatoria);
this.actualizarAnexosService.actualizarDatos(this.file);
this.router.navigate(['main/Convocatorias']);
},
error => {
console.log(error)
this.openModalError('Ya existe una Convocatoria Activa');
//this.router.navigate(['main/Convocatorias']);
}
);
}
}
}
}
\ No newline at end of file
openModalError(texto: string) {
const dialogRef = this.dialog.open(ErroresComponent, {
disableClose: true,
data: { mensaje: texto }
});
dialogRef.afterClosed().subscribe(result => {
console.log('La ventana modal se ha cerrado');
this.formularioEnviado = true;
});
}
}
<div class="modal-container">
<div class="modal-content">
<p>{{ mensaje }}</p>
<button mat-button class="confirm-button" (click)="cerrarModal(true)">
Confirmar
</button>
......
......@@ -7,15 +7,17 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
styleUrls: ['./ConfirmacionEliminacion.component.css']
})
export class ConfirmacionEliminacionComponent implements OnInit {
mensaje: string;
constructor(
private dialogRef: MatDialogRef<ConfirmacionEliminacionComponent>,
@Inject(MAT_DIALOG_DATA) public mensaje: string
@Inject(MAT_DIALOG_DATA) private data: { mensaje: string }
) {}
ngOnInit(): void {}
ngOnInit(): void {
this.mensaje = this.data.mensaje;
}
cerrarModal(confirmacion: boolean) {
this.dialogRef.close(confirmacion ? 'confirm' : 'cancel');
this.dialogRef.close(confirmacion);
}
}
import { Component, OnInit } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';
import { forkJoin } from 'rxjs';
import { Observable, forkJoin } from 'rxjs';
import { Canton } from 'src/app/modules/main/Models/Ubicaciones/canton';
import { Parroquia } from 'src/app/modules/main/Models/Ubicaciones/parroquia';
import { Provincia } from 'src/app/modules/main/Models/Ubicaciones/provincia';
......@@ -11,6 +11,8 @@ import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/
import { ComunicarService } from 'src/app/modules/main/services/comunicar/comunicar.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { Zona_detalleService } from 'src/app/modules/main/services/zona_detalle/zona_detalle.service';
import { ConfirmacionEliminacionComponent } from '../../ConfirmacionEliminacion/ConfirmacionEliminacion.component';
import { MatDialog } from '@angular/material/dialog';
@Component({
selector: 'vex-cobertura-list',
......@@ -32,7 +34,8 @@ export class CoberturaListComponent implements OnInit {
private mostrarOcultarService: MostrarOcultarService,
private datosCompar: Actualiza_datosService,
private comunicarS: ComunicarService,
private ubicacionesS: UbicacionesService
private ubicacionesS: UbicacionesService,
private dialog: MatDialog
) {
this.dataSource = new MatTableDataSource<ZonaDetalle>([]);
}
......@@ -118,18 +121,29 @@ export class CoberturaListComponent implements OnInit {
}*/
eliminarParametro(id: number) {
const confirmacion = confirm('¿Desea eliminar el registro?');
if (confirmacion) {
this.zonaS.eliminarParametros(id).subscribe(
() => {
console.log('El registro se ha eliminado');
this.obtenerRegistros();
},
(error) => {
// No mostrar el error en la consola
console.log('Error durante el tratamiento al registro');
}
);
}
this.openModalDelete('¿Desea Eliminar una Cobertura?').subscribe(result => {
if (result) {
this.zonaS.eliminarParametros(id).subscribe(
() => {
console.log('El registro se ha eliminado');
this.obtenerRegistros();
},
(error) => {
// No mostrar el error en la consola
console.log('Error durante el tratamiento al registro');
}
);
}
})
}
formularioEnviado:boolean;
openModalDelete(mensaje: string): Observable<string>{
const dialogRef = this.dialog.open(ConfirmacionEliminacionComponent, {
disableClose: true,
data: { mensaje: mensaje }
});
return dialogRef.afterClosed();
}
}
......@@ -29,7 +29,7 @@ export class EditDatosGeneralesComponent implements OnInit {
}
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10);
this.idRecuperado = this.ID_compartido.getIdGuardado();
console.log('El ID recuperado es:', this.idRecuperado);
this.programaM = this.mostrarOcultarService.editPrograma;
this.initializeForm();
......
......@@ -27,3 +27,8 @@
opacity: 0;
pointer-events: none;
}
.estilo-edi {
background-color: white;
color: #5bb02c;
}
......@@ -16,6 +16,7 @@
<mat-form-field>
<mat-label>Nombre</mat-label>
<input matInput placeholder="Nombre de la Entidad" formControlName="nombreE">
<mat-icon matSuffix matTooltip="Ingrese el nombre completo de la Institución " class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field class="example-full-width">
......@@ -25,27 +26,32 @@
{{ provincia.uzytprovincia_nombre }}
</mat-option>
</mat-select>
<mat-icon matSuffix matTooltip="Seleccione una de las 24 provincias" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
<mat-label>Ciudad</mat-label>
<input matInput formControlName="ciudadE">
<mat-icon matSuffix matTooltip="Ingrese la ciudad en la cual se encuentra la institución" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
<mat-label>Dirección</mat-label>
<input matInput formControlName="direccionE">
<mat-icon matSuffix matTooltip="Ingrese la dirección en la cual se encuentra la institución" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
<mat-label>Teléfono</mat-label>
<input matInput placeholder="Duración" formControlName="telefonoE">
<mat-icon matSuffix matTooltip="Ingrese el número convencional" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
<mat-label>Página Web</mat-label>
<input matInput placeholder="Duración" formControlName="paginaE">
<mat-icon matSuffix matTooltip="Ingrese la página web de la Institución" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
</div>
</div>
......
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog';
import { MatTableDataSource } from '@angular/material/table';
import { Provincia } from 'src/app/modules/main/Models/Ubicaciones/provincia';
import { opcionInst } from 'src/app/modules/main/Models/opcion_inst';
......@@ -9,6 +10,8 @@ import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/
import { ComunicarService } from 'src/app/modules/main/services/comunicar/comunicar.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { OpcionInstService } from 'src/app/modules/main/services/opcion_inst/opcion-inst.service';
import { ConfirmacionEliminacionComponent } from '../../ConfirmacionEliminacion/ConfirmacionEliminacion.component';
import { Observable } from 'rxjs';
@Component({
selector: 'vex-entidad-list',
......@@ -38,7 +41,8 @@ export class EntidadListComponent implements OnInit {
private provinciaM: Provincia,
private ubicacionS: UbicacionesService,
private comunicarS: ComunicarService,
private mostrarOcultarService: MostrarOcultarService
private mostrarOcultarService: MostrarOcultarService,
private dialog: MatDialog,
) {
this.dataSource = new MatTableDataSource<opcionInst>([]);
}
......@@ -99,20 +103,31 @@ export class EntidadListComponent implements OnInit {
eliminarParametro(id: number) {
const confirmacion = confirm('¿Desea eliminar el registro?');
if (confirmacion) {
this.opcionS.eliminarParametros(id).subscribe(
() => {
console.log('El registro se ha eliminado');
this.obtenerRegistros();
},
(error) => {
// No mostrar el error en la consola
console.log('Error durante el tratamiento al registro');
// Actualizar la página o la tabla
this.obtenerRegistros();
}
);
}
this.openModalDelete('¿Desea eliminar la Entidad?').subscribe(result => {
if (result) {
// Realizar la eliminación aquí
this.opcionS.eliminarParametros(id).subscribe(
() => {
console.log('El registro se ha eliminado');
this.obtenerRegistros();
},
(error) => {
console.log('Error durante el tratamiento al registro');
this.obtenerRegistros();
}
);
}
});
}
formularioEnviado:boolean;
openModalDelete(mensaje: string): Observable<string>{
const dialogRef = this.dialog.open(ConfirmacionEliminacionComponent, {
disableClose: true,
data: { mensaje: mensaje }
});
return dialogRef.afterClosed();
}
}
......@@ -21,3 +21,8 @@
margin-bottom: 16px;
width: 100%;
}
.estilo-edi {
background-color: white;
color: #5bb02c;
}
......@@ -4,7 +4,6 @@
<mat-card-header>
<div class="save-button">
<button mat-raised-button color="primary" [disabled]="myForm.invalid">Guardar</button>
</div>
</mat-card-header>
<mat-card-content>
......@@ -14,7 +13,8 @@
<mat-form-field>
<mat-label>Nombre</mat-label>
<input matInput placeholder="Nombre de la Entidad" formControlName="nombreE">
<mat-error *ngIf="myForm.get('nombreE').hasError('required')">Debe ingrear el nombre de la Institución</mat-error>
<mat-error *ngIf="myForm.get('nombreE').hasError('required')">Debe ingresar el nombre de la Institución</mat-error>
<mat-icon matSuffix matTooltip="Ingrese el nombre completo de la Institución " class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field class="example-full-width">
......@@ -25,27 +25,30 @@
</mat-option>
</mat-select>
<mat-error *ngIf="myForm.get('provincia').hasError('required')">Debe seleccionar una provincia</mat-error>
<mat-icon matSuffix matTooltip="Seleccione una de las 24 provincias" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
<mat-label>Ciudad</mat-label>
<input matInput formControlName="ciudadE">
<mat-error *ngIf="myForm.get('ciudadE').hasError('required')">La ciudad es requerida</mat-error>
<mat-icon matSuffix matTooltip="Ingrese la ciudad en la cual se encuentra la institución" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
<mat-label>Dirección</mat-label>
<input matInput formControlName="direccionE">
<mat-error *ngIf="myForm.get('direccionE').hasError('required')">La dirección es requerida</mat-error>
<mat-error *ngIf="myForm.get('direccionE').hasError('maxLengthExceeded')">La dirección no debe exceder de los 300 caracteres</mat-error>
<mat-error *ngIf="myForm.get('direccionE').hasError('maxLength')">La dirección no debe exceder de los 300 caracteres</mat-error>
<mat-icon matSuffix matTooltip="Ingrese la dirección en la cual se encuentra la institución" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
<mat-label>Teléfono</mat-label>
<input matInput placeholder="Número de teléfono" formControlName="telefonoE">
<mat-error *ngIf="myForm.get('telefonoE').hasError('required')">El teléfono es requerido</mat-error>
<mat-error *ngIf="myForm.get('telefonoE').hasError('pattern')">Ingresa un número de teléfono válido de Ecuador (comienza con 09 y tiene 10 dígitos)</mat-error>
<mat-error *ngIf="myForm.get('telefonoE').hasError('pattern')">Ingresa un número de teléfono válido de Ecuador</mat-error>
<mat-icon matSuffix matTooltip="Ingrese el número convencional" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
<mat-form-field>
......@@ -53,8 +56,8 @@
<input matInput placeholder="Página Web" formControlName="paginaE">
<mat-error *ngIf="myForm.get('paginaE').hasError('required')">La página web es requerida</mat-error>
<mat-error *ngIf="myForm.get('paginaE').hasError('pattern')">Ingresa una URL válida (puede comenzar con www)</mat-error>
<mat-icon matSuffix matTooltip="Ingrese la página web de la Institución" class="estilo-edi">help_outline</mat-icon>
</mat-form-field>
</div>
</div>
</mat-card-content>
......
......@@ -36,7 +36,7 @@ export class EntidadComponent implements OnInit {
nombreE: ['', Validators.required],
ciudadE: ['', Validators.required],
direccionE: ['',[Validators.required, this.validateDireccion]],
telefonoE: ['', [Validators.required, Validators.pattern('^09[0-9]{8}$')]],
telefonoE: ['', [Validators.required, Validators.pattern('^02[0-9]{7}$')]],
paginaE: ['', [Validators.required, Validators.pattern('^(www\\.|http://www\\.|https://www\\.)[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(?:/[^\\s]*)?$')]],
provincia: ['', Validators.required]
});
......
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
}
.modal-content {
background-color: white;
padding: 20px;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
max-width: 400px;
width: 100%;
text-align: center;
position: relative;
}
.success-icon {
font-size: 80px;
color: #006400;
margin-right: 1em;
}
.modal-content p {
margin-bottom: 20px;
}
.modal-content button {
background-color: #e03535;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
}
.modal-content button:hover {
background-color: #ea5656;
}
<div class="modal">
<div class="modal-content">
<p>
{{mensaje}}</p>
<button mat-button (click)="closeModal()">Cerrar</button>
</div>
</div>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ErroresComponent } from './errores.component';
describe('ErroresComponent', () => {
let component: ErroresComponent;
let fixture: ComponentFixture<ErroresComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ErroresComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(ErroresComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, Inject, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
@Component({
selector: 'vex-errores',
templateUrl: './errores.component.html',
styleUrls: ['./errores.component.css']
})
export class ErroresComponent implements OnInit {
formularioEnviado = true;
mensaje:string;
constructor(
private dialogRef: MatDialogRef<ErroresComponent>,
@Inject(MAT_DIALOG_DATA) public data: any
) {
this.mensaje = data.mensaje;
}
ngOnInit(): void {
}
closeModal() {
this.dialogRef.close();
setTimeout(() => {
window.location.reload();
}, 1000);
}
}
import { Component, OnInit } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { MatTableDataSource } from '@angular/material/table';
import { Observable } from 'rxjs';
import { objetivosEstraInst } from 'src/app/modules/main/Models/objetivoEstraInst';
import { proObjeEstra } from 'src/app/modules/main/Models/proObjEstr';
import { prograObj } from 'src/app/modules/main/Models/prograObj';
......@@ -8,6 +10,7 @@ import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/
import { Obj_estra_agService } from 'src/app/modules/main/services/obj_estra_agre/obj_estra_ag.service';
import { ObjetivosPLNBVService } from 'src/app/modules/main/services/objetivosPLNBV/objetivos-plnbv.service';
import { ObjetivosEstraSService } from 'src/app/modules/main/services/objetivos_estra_inst/objetivosEstraS.service';
import { ConfirmacionEliminacionComponent } from '../../../ConfirmacionEliminacion/ConfirmacionEliminacion.component';
@Component({
selector: 'vex-obj-ei-list',
......@@ -40,6 +43,7 @@ export class ObjEiListComponent implements OnInit {
private id_compartido: Compartir_idService,
private datosCompartidos: Actualiza_datosService,
private objEstraInS: ObjetivosEstraSService,
private dialog: MatDialog
) { this.datasource = new MatTableDataSource<proObjeEstra>([]); }
ngOnInit(): void {
......@@ -101,18 +105,29 @@ export class ObjEiListComponent implements OnInit {
}
eliminarParametros(id: number) {
const confirmacion = confirm('¿Desea eliminar el registro?');
if (confirmacion) {
this.proObS.eliminarParametros(id).subscribe(
() => {
console.log('El registro se ha eliminado');
this.obtenerRegistros();
},
(error) => {
// No mostrar el error en la consola
console.log('Error durante el tratamiento al registro');
}
);
}
this.openModalDelete('¿Esta Segudo de Eliminar el Objetivo Estrategico?').subscribe(result =>{
if (result) {
this.proObS.eliminarParametros(id).subscribe(
() => {
console.log('El registro se ha eliminado');
this.obtenerRegistros();
},
(error) => {
// No mostrar el error en la consola
console.log('Error durante el tratamiento al registro');
}
);
}
})
}
formularioEnviado:boolean;
openModalDelete(mensaje: string): Observable<string>{
const dialogRef = this.dialog.open(ConfirmacionEliminacionComponent, {
disableClose: true,
data: { mensaje: mensaje }
});
return dialogRef.afterClosed();
}
}
......@@ -7,6 +7,8 @@ import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { ObjetivosPLNBVService } from 'src/app/modules/main/services/objetivosPLNBV/objetivos-plnbv.service';
import { PrograObjService } from 'src/app/modules/main/services/prograObj/prograObj.service';
import { ConfirmacionEliminacionComponent } from '../../../ConfirmacionEliminacion/ConfirmacionEliminacion.component';
import { Observable } from 'rxjs';
@Component({
selector: 'vex-obj-p-list',
templateUrl: './obj-p-list.component.html',
......@@ -33,7 +35,7 @@ export class ObjPListComponent implements OnInit {
private objPS: PrograObjService,
private id_Compartido: Compartir_idService,
private dialog: MatDialog,
private datosCompartidos: Actualiza_datosService
private datosCompartidos: Actualiza_datosService,
) {
this.dataSource = new MatTableDataSource<prograObj>([]);
}
......@@ -90,19 +92,29 @@ export class ObjPListComponent implements OnInit {
}
eliminarParametros(id: number) {
const confirmacion = confirm('¿Desea eliminar el registro?');
if (confirmacion) {
this.objPS.eliminarParametros(id).subscribe(
() => {
console.log('El registro se ha eliminado');
this.obtenerRegistros();
this.obtenerObjetivos();
},
(error) => {
// No mostrar el error en la consola
console.log('Error durante el tratamiento al registro');
}
);
}
this.openModalDelete('¿Desea Eliminar este Objetivo Del Buen Vivir?').subscribe(result =>{
if (result) {
this.objPS.eliminarParametros(id).subscribe(
() => {
this.obtenerRegistros();
this.obtenerObjetivos();
},
(error) => {
// No mostrar el error en la consola
console.log('Error durante el tratamiento al registro');
}
);
}
})
}
formularioEnviado:boolean;
openModalDelete(mensaje: string): Observable<string>{
const dialogRef = this.dialog.open(ConfirmacionEliminacionComponent, {
disableClose: true,
data: { mensaje: mensaje }
});
return dialogRef.afterClosed();
}
}
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