cambios destinados para las siguientes fases

parent 5b90fc1b
...@@ -5,4 +5,5 @@ export class Canton { ...@@ -5,4 +5,5 @@ export class Canton {
uzytcantonGrupo?: string; uzytcantonGrupo?: string;
uzytcantonLatitud?: string; uzytcantonLatitud?: string;
uzytcantonLongitud?: number; uzytcantonLongitud?: number;
uzytprovincia_id?: string;
} }
export class Parroquia{ export class Parroquia{
uzytparroquia_id?: string; uzytparroquia_id?: string;
uzytcanton_id?: string;
uzytparroquia_nombre?: string; uzytparroquia_nombre?: string;
uzytparroquia_tipo?: string; uzytparroquia_tipo?: string;
uzytparroquia_grupo_recinto?: number; uzytparroquia_grupo_recinto?: number;
......
export class docompar{
UZYTAVDOCOMPAR_CODE?: number;
UZYTAVINSTPROY_ID?: number;
UZYTAVDOCOMPAR_NOMBRE_DOC?: string;
UZYTAVDOCOMPAR_NOMBRE_URL?: string;
UZYTAVDOCOMPAR_FECHA_CREA?: Date;
}
...@@ -13,6 +13,7 @@ export class Instituciones { ...@@ -13,6 +13,7 @@ export class Instituciones {
uzytparroquia_id?:string; uzytparroquia_id?:string;
uzytparroquia: { uzytparroquia: {
uzytparroquia_id: string; uzytparroquia_id: string;
uzytcanton_id: string;
uzytparroquia_nombre: string; uzytparroquia_nombre: string;
uzytparroquia_tipo: string; uzytparroquia_tipo: string;
uzytparroquia_grupo_recinto: number; uzytparroquia_grupo_recinto: number;
......
export class instproy{
uzytavinstproy_id?: number;
uzytavproyec_id?: number;
uzytavinstituc_id?: number;
uzytparametros_det_id_organizacion?: number;
uzytparametros_det_id_entidad?: number;
uzytavinstproy_detaotro?: string;
uzytavinstproy_declaracion?: string;
uzytavinstproy_fecha_crea?: Date;
uzytavinstproy_dir_hombres?: number;
uzytavinstproy_dir_mujeres?: number;
uzytavinstproy_dir_ninios?: number;
uzytavinstproy_dir_discapacidad?: number;
uzytavinstproy_indirectos?: number;
uzytavinstproy_desc_benefic?: string;
uzytavinstproy_DIRECTOS?: number;
uzytavinstproy_TOTAL?: number;
}
export class parametrosdet{
uzytparametros_det_id?: number;
uzytparametros_det_id_alt?: string;
uzytparametros_det_descripcion?: string;
uzytparametros_det_estado?: string;
uzytparametros_det_orden?: number;
}
...@@ -2,18 +2,18 @@ import { Observable } from "rxjs" ...@@ -2,18 +2,18 @@ import { Observable } from "rxjs"
export class Usuario { export class Usuario {
uzytusuario_id: number uzytusuario_id: number
uzytusuario_cc : string uzytusuario_cc: string
uzytusuario_clave: string uzytusuario_clave: string
uzytusuario_nombres: string uzytusuario_nombres: string
uzytusuario_apellidos: string uzytusuario_apellidos: string
uzytusuario_email: string uzytusuario_email: string
fechaRegistro : Date fechaRegistro: Date
uzytusuario_estado: string uzytusuario_estado: string
uzytusuario_mail_sinformul : number uzytusuario_mail_sinformul: number
uzytusuario_mail_incompletos : number uzytusuario_mail_incompletos: number
uzytusuario_tipo_doc: string uzytusuario_tipo_doc: string
uzytusuario_cod_senescyt: string uzytusuario_cod_senescyt: string
uzytusuario_fecha_act_micuenta : Date uzytusuario_fecha_act_micuenta: Date
uzytusuario_hexadecimalid: string uzytusuario_hexadecimalid: string
uzytusuario_tratamiento: string uzytusuario_tratamiento: string
uzytusuario_modificacion: number uzytusuario_modificacion: number
...@@ -22,13 +22,13 @@ export class Usuario { ...@@ -22,13 +22,13 @@ export class Usuario {
uzytusuario_telefono_fijo: string uzytusuario_telefono_fijo: string
uzytusuario_telefono_celular: string uzytusuario_telefono_celular: string
spriden_id: string spriden_id: string
spriden_pidm : number spriden_pidm: number
uzytusuario_clave_tmp: string uzytusuario_clave_tmp: string
spbpers_name_prefix: string spbpers_name_prefix: string
spbpers_sex: string spbpers_sex: string
uzytusuario_campus: string uzytusuario_campus: string
uzytusuario_CAMPUS_ABREV_CODE: string; uzytusuario_CAMPUS_ABREV_CODE: string;
uzytusuario_CAMPUS_CODE:string uzytusuario_CAMPUS_CODE: string
uzytusuario_departamento: string uzytusuario_departamento: string
uzytusuario_DPTO_ABREV_CODE: string; uzytusuario_DPTO_ABREV_CODE: string;
uzytusuario_DEPARTAMENTO_CODE; string uzytusuario_DEPARTAMENTO_CODE; string
......
...@@ -193,9 +193,32 @@ import { EnvioFormularioComponent } from './pages/programa/opciones/envio-formul ...@@ -193,9 +193,32 @@ import { EnvioFormularioComponent } from './pages/programa/opciones/envio-formul
import { ComisionEvaComponent } from './pages/asignar comision/comision-eva/comision-eva.component'; import { ComisionEvaComponent } from './pages/asignar comision/comision-eva/comision-eva.component';
import { CKEditorModule } from '@ckeditor/ckeditor5-angular'; import { CKEditorModule } from '@ckeditor/ckeditor5-angular';
import { ResultadosComponent } from './pages/Proyectos/Cierre/resultados proyecto/resultados/resultados.component'; import { ResultadosComponent } from './pages/Proyectos/Cierre/resultados proyecto/resultados/resultados.component';
import { MatTreeModule } from '@angular/material/tree';
import { AddCompromisoComponent } from './pages/Proyectos/Inicio Ejecución/compromiso participacion/add-compromiso/add-compromiso.component';
import { ListCompromisoComponent } from './pages/Proyectos/Inicio Ejecución/compromiso participacion/list-compromiso/list-compromiso.component';
import { instproy } from './Models/instproy';
import { ListDocumentosComponent } from './pages/Proyectos/Inicio Ejecución/compromiso participacion/list-documentos/list-documentos.component';
import { AddDocumentosComponent } from './pages/Proyectos/Inicio Ejecución/compromiso participacion/add-documentos/add-documentos.component';
import { CartaCompromisoComuComponent } from './pages/Proyectos/Inicio Ejecución/carta compromiso comunidad/carta-compromiso-comu/carta-compromiso-comu.component';
import { ListInstiComponent } from './pages/Proyectos/Cierre/numerico de beneficiarios/list-insti/list-insti.component';
import { EditInstiComponent } from './pages/Proyectos/Cierre/numerico de beneficiarios/edit-insti/edit-insti.component';
import { ActaCompromisoCarrerasComponent } from './pages/Proyectos/Acta de Compromiso de Carreras/acta-compromiso-carreras/acta-compromiso-carreras.component';
import { ActaConsejoDepartamentoComponent } from './pages/Proyectos/Acta de Consejo de Departamento/acta-consejo-departamento/acta-consejo-departamento.component';
import { ActaDirectorProyectoComponent } from './pages/Proyectos/Acta Compromiso Director Proyecto/acta-director-proyecto/acta-director-proyecto.component';
import { ListarActaCompromisoCarrerasComponent } from './pages/Proyectos/Acta de Compromiso de Carreras/listar-acta-compromiso-carreras/listar-acta-compromiso-carreras.component';
import { ListarActaConsejoDepartamentoComponent } from './pages/Proyectos/Acta de Consejo de Departamento/listar-acta-consejo-departamento/listar-acta-consejo-departamento.component';
import { PdfComponent } from './pages/Proyectos/pdf/pdf.component';
import { ListObjetivosEjecComponent } from './pages/Proyectos/Cierre/objetivos ejecutados/list-objetivos-ejec/list-objetivos-ejec.component';
import { EditObjetivosEjecComponent } from './pages/Proyectos/Cierre/objetivos ejecutados/edit-objetivos-ejec/edit-objetivos-ejec.component';
@NgModule({ @NgModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
declarations: [ declarations: [
ActaCompromisoCarrerasComponent,
ActaConsejoDepartamentoComponent,
ActaDirectorProyectoComponent,
ListCompromisoComponent,
ListarActaCompromisoCarrerasComponent,
ListarActaConsejoDepartamentoComponent,
AddCronogramaActiComponent, AddCronogramaActiComponent,
AddHitosComponent, AddHitosComponent,
InicialProyectoComponent, InicialProyectoComponent,
...@@ -340,12 +363,22 @@ import { ResultadosComponent } from './pages/Proyectos/Cierre/resultados proyect ...@@ -340,12 +363,22 @@ import { ResultadosComponent } from './pages/Proyectos/Cierre/resultados proyect
EnvioFormularioComponent, EnvioFormularioComponent,
ComisionEvaComponent, ComisionEvaComponent,
ResultadosComponent, ResultadosComponent,
AddCompromisoComponent,
ListCompromisoComponent,
ListDocumentosComponent,
AddDocumentosComponent,
CartaCompromisoComuComponent,
ListInstiComponent,
EditInstiComponent,
PdfComponent,
ListObjetivosEjecComponent,
EditObjetivosEjecComponent,
], ],
imports: [ imports: [
MatTreeModule,
CKEditorModule, CKEditorModule,
FullCalendarModule, FullCalendarModule,
MatSelectFilterModule, MatSelectFilterModule,
MatAutocompleteModule,
AngularEditorModule, AngularEditorModule,
HttpClientModule, HttpClientModule,
CommonModule, CommonModule,
...@@ -374,6 +407,7 @@ import { ResultadosComponent } from './pages/Proyectos/Cierre/resultados proyect ...@@ -374,6 +407,7 @@ import { ResultadosComponent } from './pages/Proyectos/Cierre/resultados proyect
MatRadioModule MatRadioModule
], ],
providers: [ providers: [
instproy,
objetivoprograma, objetivoprograma,
proObjeEstra, proObjeEstra,
Proyectos, Proyectos,
......
/* Estilos para el formulario */
.formulario {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 96%;
margin: 0 auto;
background-color: white;
border-radius: 10px;
}
.botones{
width: 100px;
height: 40px;
text-align: center;
padding: 0;
}
/* Estilos para la columna única */
.columna-unico {
width: 100%;
box-sizing: border-box;
padding-right: 0;
padding-left: 0;
}
/* Estilos para los labels */
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
/* Estilos para los inputs y selects */
input[type="text"],
select {
width: 100%;
padding: 10px;
border: none;
border-bottom: 1px solid #ccc;
background-color: transparent;
font-size: 16px;
margin-bottom: 16px;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
select:focus {
outline: none;
border-color: #4caf50;
}
/* Estilos para los mensajes de error */
.error-message {
color: red;
font-size: 14px;
margin-top: 4px;
}
/* Estilos para el botón */
button {
display: block;
margin: 20px auto;
padding: 10px 20px;
background-color: rgb(71, 127, 75);
color: #fff;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: rgb(90, 159, 95);
}
/* Estilos para el contenedor principal */
.contenedor {
width: 96%;
margin-left: 2%;
margin-right: 2%;
margin-top: 10%;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: #ffffff;
position: relative;
z-index: 1;
}
/* Estilos para el contenedor del formulario */
.contenedor-dos {
margin-top: 30px;
padding: 0.9375rem 20px;
position: relative;
}
/* Estilos para el título sobremontado */
.sobremontado {
position: relative;
width: 96%;
top: -20px;
left: 2%;
background-color: #477f4b;
color: #fff;
text-align: center;
padding: 10px;
box-sizing: border-box;
margin-bottom: -50px;
z-index: 2;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Estilos para el icono de instituciones */
.icono-instituciones {
display: flex;
align-items: center;
justify-content: center;
margin-right: 5px;
font-size: 20px;
}
.volver{
position: absolute;
top: 25%;
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;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.input-container {
width: 100%;
display: flex;
flex-direction: column;
margin-bottom: 16px;
}
\ No newline at end of file
<div class="contenedor-dos">
<form class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<!-- Información de la institución -->
<div class="columna-unico">
<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>
<span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio" (click)="cancelado()">Cancelar</button>
</div>
<!-- Control de PDF -->
<div class="input-container">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)"
formControlName="archivo">
</div>
</div>
</form>
</div>
\ No newline at end of file
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { ActaDirectorProyectoComponent } from './acta-director-proyecto.component';
describe('ActaDirectorProyectoComponent', () => {
let component: ActaDirectorProyectoComponent;
let fixture: ComponentFixture<ActaDirectorProyectoComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ActaDirectorProyectoComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ActaDirectorProyectoComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { FormBuilder, Validators, FormGroup } from '@angular/forms';
import { AnexosImagenes } from 'src/app/modules/main/Models/anexos-imagenes';
import { AnexosImagenesService } from 'src/app/modules/main/services/anexos-imagenes/anexos-imagenes.service';
import { ConvocatoriaService } from 'src/app/modules/main/services/convocatoria/convocatoria.service';
import { MatDialog } from '@angular/material/dialog';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { format } from 'date-fns';
import { ActualizarAnexosService } from 'src/app/modules/main/services/actualizar_anexos/actualizar-anexos.service';
import { EnvioFormularioComponent } from '../../../programa/opciones/envio-formulario/envio-formulario.component';
import { ProyectosService } from 'src/app/modules/main/services/proyectos/proyectos.service';
import { ProyectoComponent } from '../../Proyectos/Proyecto/Proyecto.component';
import { Proyectos } from 'src/app/modules/main/Models/proyectos';
import { DatosEspeService } from 'src/app/modules/main/services/APIs Externas/Datos espe/datos-espe.service';
@Component({
selector: 'app-acta-director-proyecto',
templateUrl: './acta-director-proyecto.component.html',
styleUrls: ['./acta-director-proyecto.component.css']
})
export class ActaDirectorProyectoComponent implements OnInit {
myForm: FormGroup;
selectedFile: File | null = null;
file: File;
anexosImagenes: AnexosImagenes = {};
enviarSolicitud = false;
formularioEnviado: boolean
cambio: boolean;
proyecto: Proyectos
constructor(
private formBuilder: FormBuilder,
private proyectosService: ProyectosService,
private dialog: MatDialog,
private actualizarAnexosService: ActualizarAnexosService,
private datosCompartidos: Actualiza_datosService,
private idCompartido: Compartir_idService,
private datosEspeService: DatosEspeService,
) {
this.proyecto = new Proyectos();
}
ngOnInit(): void {
this.cambio = false;
this.myForm = this.formBuilder.group({
archivo: [{ value: '', disabled: true }, Validators.required],
});
}
onFileSelected(event: any) {
this.selectedFile = event.target.files[0];
}
onFileChange(event: any) {
// Obtener el archivo seleccionado
const fileList: FileList = event.target.files;
if (fileList.length > 0) {
this.file = fileList[0];
}
}
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
width: '400px',
disableClose: true
});
dialogRef.afterClosed().subscribe(result => {
this.formularioEnviado = true;
});
}
async onSubmit() {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idCompartido.getIdGuardado();
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)
}
);
}
}
async enviarPDF() {
const formData = new FormData();
formData.append('files', this.file);
formData.append('sistema', 'vinculacion');
try {
const response = await this.datosEspeService.saveDocument(formData);
return {
idPDF: response.uuid,
filename: response.fileName
};
} catch (error) {
console.error('Error al guardar el PDF en el servidor:', error);
throw error;
}
}
cambiar() {
this.cambio = true;
this.myForm.get('archivo').enable();
}
cancelado() {
this.cambio = false;
this.myForm.disable();
}
}
/* Estilos para el formulario */
.formulario {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 96%;
margin: 0 auto;
background-color: white;
border-radius: 10px;
}
.botones{
width: 100px;
height: 40px;
text-align: center;
padding: 0;
}
/* Estilos para la columna única */
.columna-unico {
width: 100%;
box-sizing: border-box;
padding-right: 0;
padding-left: 0;
}
/* Estilos para los labels */
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
/* Estilos para los inputs y selects */
input[type="text"],
select {
width: 100%;
padding: 10px;
border: none;
border-bottom: 1px solid #ccc;
background-color: transparent;
font-size: 16px;
margin-bottom: 16px;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
select:focus {
outline: none;
border-color: #4caf50;
}
/* Estilos para los mensajes de error */
.error-message {
color: red;
font-size: 14px;
margin-top: 4px;
}
/* Estilos para el botón */
button {
display: block;
margin: 20px auto;
padding: 10px 20px;
background-color: rgb(71, 127, 75);
color: #fff;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: rgb(90, 159, 95);
}
/* Estilos para el contenedor principal */
.contenedor {
width: 96%;
margin-left: 2%;
margin-right: 2%;
margin-top: 10%;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: #ffffff;
position: relative;
z-index: 1;
}
/* Estilos para el contenedor del formulario */
.contenedor-dos {
margin-top: 30px;
padding: 0.9375rem 20px;
position: relative;
}
/* Estilos para el título sobremontado */
.sobremontado {
position: relative;
width: 96%;
top: -20px;
left: 2%;
background-color: #477f4b;
color: #fff;
text-align: center;
padding: 10px;
box-sizing: border-box;
margin-bottom: -50px;
z-index: 2;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Estilos para el icono de instituciones */
.icono-instituciones {
display: flex;
align-items: center;
justify-content: center;
margin-right: 5px;
font-size: 20px;
}
.volver{
position: absolute;
top: 25%;
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;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.input-container {
width: 100%;
display: flex;
flex-direction: column;
margin-bottom: 16px;
}
\ No newline at end of file
<div class="contenedor-dos">
<form class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<!-- Información de la institución -->
<div class="columna-unico">
<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>
<span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio" (click)="cancelado()">Cancelar</button>
</div>
<!-- Control de PDF -->
<div class="input-container">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)"
formControlName="archivo">
</div>
</div>
</form>
</div>
\ No newline at end of file
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { ActaCompromisoCarrerasComponent } from './acta-compromiso-carreras.component';
describe('ActaCompromisoCarrerasComponent', () => {
let component: ActaCompromisoCarrerasComponent;
let fixture: ComponentFixture<ActaCompromisoCarrerasComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ActaCompromisoCarrerasComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ActaCompromisoCarrerasComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { FormBuilder, Validators, FormGroup } from '@angular/forms';
import { AnexosImagenes } from 'src/app/modules/main/Models/anexos-imagenes';
import { AnexosImagenesService } from 'src/app/modules/main/services/anexos-imagenes/anexos-imagenes.service';
import { ConvocatoriaService } from 'src/app/modules/main/services/convocatoria/convocatoria.service';
import { MatDialog } from '@angular/material/dialog';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { format } from 'date-fns';
import { ActualizarAnexosService } from 'src/app/modules/main/services/actualizar_anexos/actualizar-anexos.service';
import { EnvioFormularioComponent } from '../../../programa/opciones/envio-formulario/envio-formulario.component';
import { ProyectosService } from 'src/app/modules/main/services/proyectos/proyectos.service';
import { ProyectoComponent } from '../../Proyectos/Proyecto/Proyecto.component';
import { Proyectos } from 'src/app/modules/main/Models/proyectos';
import { DatosEspeService } from 'src/app/modules/main/services/APIs Externas/Datos espe/datos-espe.service';
@Component({
selector: 'app-acta-compromiso-carreras',
templateUrl: './acta-compromiso-carreras.component.html',
styleUrls: ['./acta-compromiso-carreras.component.css']
})
export class ActaCompromisoCarrerasComponent implements OnInit {
myForm: FormGroup;
selectedFile: File | null = null;
file: File;
anexosImagenes: AnexosImagenes = {};
enviarSolicitud = false;
formularioEnviado: boolean
cambio: boolean;
proyecto: Proyectos
constructor(
private formBuilder: FormBuilder,
private proyectosService: ProyectosService,
private dialog: MatDialog,
private actualizarAnexosService: ActualizarAnexosService,
private datosCompartidos: Actualiza_datosService,
private idCompartido: Compartir_idService,
private datosEspeService: DatosEspeService,
) {
this.proyecto = new Proyectos();
}
ngOnInit(): void {
this.cambio = false;
this.myForm = this.formBuilder.group({
archivo: [{ value: '', disabled: true }, Validators.required],
});
}
onFileSelected(event: any) {
this.selectedFile = event.target.files[0];
}
onFileChange(event: any) {
// Obtener el archivo seleccionado
const fileList: FileList = event.target.files;
if (fileList.length > 0) {
this.file = fileList[0];
}
}
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
width: '400px',
disableClose: true
});
dialogRef.afterClosed().subscribe(result => {
this.formularioEnviado = true;
});
}
async onSubmit() {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idCompartido.getIdGuardado();
const pdfData = await this.enviarPDF();
this.proyecto.uzytavproyec_com_part2_url = pdfData.idPDF;
this.proyecto.uzytavproyec_com_part2_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)
}
);
}
}
async enviarPDF() {
const formData = new FormData();
formData.append('files', this.file);
formData.append('sistema', 'vinculacion');
try {
const response = await this.datosEspeService.saveDocument(formData);
return {
idPDF: response.uuid,
filename: response.fileName
};
} catch (error) {
console.error('Error al guardar el PDF en el servidor:', error);
throw error;
}
}
cambiar() {
this.cambio = true;
this.myForm.get('archivo').enable();
}
cancelado() {
this.cambio = false;
this.myForm.disable();
}
}
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { ListarActaCompromisoCarrerasComponent } from './listar-acta-compromiso-carreras.component';
describe('ListarActaCompromisoCarrerasComponent', () => {
let component: ListarActaCompromisoCarrerasComponent;
let fixture: ComponentFixture<ListarActaCompromisoCarrerasComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ListarActaCompromisoCarrerasComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ListarActaCompromisoCarrerasComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-listar-acta-compromiso-carreras',
templateUrl: './listar-acta-compromiso-carreras.component.html',
styleUrls: ['./listar-acta-compromiso-carreras.component.css']
})
export class ListarActaCompromisoCarrerasComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
/* Estilos para el formulario */
.formulario {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 96%;
margin: 0 auto;
background-color: white;
border-radius: 10px;
}
.botones{
width: 100px;
height: 40px;
text-align: center;
padding: 0;
}
/* Estilos para la columna única */
.columna-unico {
width: 100%;
box-sizing: border-box;
padding-right: 0;
padding-left: 0;
}
/* Estilos para los labels */
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
/* Estilos para los inputs y selects */
input[type="text"],
select {
width: 100%;
padding: 10px;
border: none;
border-bottom: 1px solid #ccc;
background-color: transparent;
font-size: 16px;
margin-bottom: 16px;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
select:focus {
outline: none;
border-color: #4caf50;
}
/* Estilos para los mensajes de error */
.error-message {
color: red;
font-size: 14px;
margin-top: 4px;
}
/* Estilos para el botón */
button {
display: block;
margin: 20px auto;
padding: 10px 20px;
background-color: rgb(71, 127, 75);
color: #fff;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: rgb(90, 159, 95);
}
/* Estilos para el contenedor principal */
.contenedor {
width: 96%;
margin-left: 2%;
margin-right: 2%;
margin-top: 10%;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: #ffffff;
position: relative;
z-index: 1;
}
/* Estilos para el contenedor del formulario */
.contenedor-dos {
margin-top: 30px;
padding: 0.9375rem 20px;
position: relative;
}
/* Estilos para el título sobremontado */
.sobremontado {
position: relative;
width: 96%;
top: -20px;
left: 2%;
background-color: #477f4b;
color: #fff;
text-align: center;
padding: 10px;
box-sizing: border-box;
margin-bottom: -50px;
z-index: 2;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Estilos para el icono de instituciones */
.icono-instituciones {
display: flex;
align-items: center;
justify-content: center;
margin-right: 5px;
font-size: 20px;
}
.volver{
position: absolute;
top: 25%;
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;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.input-container {
width: 100%;
display: flex;
flex-direction: column;
margin-bottom: 16px;
}
\ No newline at end of file
<div class="contenedor-dos">
<form class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<!-- Información de la institución -->
<div class="columna-unico">
<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>
<span class="separator"></span>
<button mat-raised-button color="warn" *ngIf="cambio" (click)="cancelado()">Cancelar</button>
</div>
<!-- Control de PDF -->
<div class="input-container">
<label>Subir Archivo</label>
<input type="file" id="uzytavconvoca_digital" (change)="onFileChange($event)"
formControlName="archivo">
</div>
</div>
</form>
</div>
\ No newline at end of file
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { ActaConsejoDepartamentoComponent } from './acta-consejo-departamento.component';
describe('ActaConsejoDepartamentoComponent', () => {
let component: ActaConsejoDepartamentoComponent;
let fixture: ComponentFixture<ActaConsejoDepartamentoComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ActaConsejoDepartamentoComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ActaConsejoDepartamentoComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { FormBuilder, Validators, FormGroup } from '@angular/forms';
import { AnexosImagenes } from 'src/app/modules/main/Models/anexos-imagenes';
import { AnexosImagenesService } from 'src/app/modules/main/services/anexos-imagenes/anexos-imagenes.service';
import { ConvocatoriaService } from 'src/app/modules/main/services/convocatoria/convocatoria.service';
import { MatDialog } from '@angular/material/dialog';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { format } from 'date-fns';
import { ActualizarAnexosService } from 'src/app/modules/main/services/actualizar_anexos/actualizar-anexos.service';
import { EnvioFormularioComponent } from '../../../programa/opciones/envio-formulario/envio-formulario.component';
import { ProyectosService } from 'src/app/modules/main/services/proyectos/proyectos.service';
import { ProyectoComponent } from '../../Proyectos/Proyecto/Proyecto.component';
import { Proyectos } from 'src/app/modules/main/Models/proyectos';
import { DatosEspeService } from 'src/app/modules/main/services/APIs Externas/Datos espe/datos-espe.service';
@Component({
selector: 'app-acta-consejo-departamento',
templateUrl: './acta-consejo-departamento.component.html',
styleUrls: ['./acta-consejo-departamento.component.css']
})
export class ActaConsejoDepartamentoComponent implements OnInit {
myForm: FormGroup;
selectedFile: File | null = null;
file: File;
anexosImagenes: AnexosImagenes = {};
enviarSolicitud = false;
formularioEnviado: boolean
cambio: boolean;
proyecto: Proyectos
constructor(
private formBuilder: FormBuilder,
private proyectosService: ProyectosService,
private dialog: MatDialog,
private actualizarAnexosService: ActualizarAnexosService,
private datosCompartidos: Actualiza_datosService,
private idCompartido: Compartir_idService,
private datosEspeService: DatosEspeService,
) {
this.proyecto = new Proyectos();
}
ngOnInit(): void {
this.cambio = false;
this.myForm = this.formBuilder.group({
archivo: [{ value: '', disabled: true }, Validators.required],
});
}
onFileSelected(event: any) {
this.selectedFile = event.target.files[0];
}
onFileChange(event: any) {
// Obtener el archivo seleccionado
const fileList: FileList = event.target.files;
if (fileList.length > 0) {
this.file = fileList[0];
}
}
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
width: '400px',
disableClose: true
});
dialogRef.afterClosed().subscribe(result => {
this.formularioEnviado = true;
});
}
async onSubmit() {
if (this.myForm.valid) {
this.proyecto.uzytavproyec_id = this.idCompartido.getIdGuardado();
const pdfData = await this.enviarPDF();
this.proyecto.uzytavproyec_aprob_con_dep_url = pdfData.idPDF;
this.proyecto.uzytavproyec_aprob_con_dep_nom = pdfData.filename;
this.proyectosService.modificarParametros(this.proyecto.uzytavproyec_id, this.proyecto).subscribe(
response => {
this.openModal();
console.log('Datos Actualizados', this.proyecto);
this.myForm.disable();
this.cambio = false;
},
error => {
console.log(error)
}
);
}
}
async enviarPDF() {
const formData = new FormData();
formData.append('files', this.file);
formData.append('sistema', 'vinculacion');
try {
const response = await this.datosEspeService.saveDocument(formData);
return {
idPDF: response.uuid,
filename: response.fileName
};
} catch (error) {
console.error('Error al guardar el PDF en el servidor:', error);
throw error;
}
}
cambiar() {
this.cambio = true;
this.myForm.get('archivo').enable();
}
cancelado() {
this.cambio = false;
this.myForm.disable();
}
}
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { ListarActaConsejoDepartamentoComponent } from './listar-acta-consejo-departamento.component';
describe('ListarActaConsejoDepartamentoComponent', () => {
let component: ListarActaConsejoDepartamentoComponent;
let fixture: ComponentFixture<ListarActaConsejoDepartamentoComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ListarActaConsejoDepartamentoComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ListarActaConsejoDepartamentoComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-listar-acta-consejo-departamento',
templateUrl: './listar-acta-consejo-departamento.component.html',
styleUrls: ['./listar-acta-consejo-departamento.component.css']
})
export class ListarActaConsejoDepartamentoComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
...@@ -60,7 +60,7 @@ export class ObjetivosZonaComponent implements OnInit { ...@@ -60,7 +60,7 @@ export class ObjetivosZonaComponent implements OnInit {
ngOnInit() { ngOnInit() {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10); this.idRecuperado = this.idCompartido.getIdZonaDetalle();
this.zonaDM = this.mostrarOcultarService.coberturaEdit; this.zonaDM = this.mostrarOcultarService.coberturaEdit;
this.mostrarObjetivosZona = true this.mostrarObjetivosZona = true
console.log("en el componente agregar se inicializa como : ", this.mostrarObjetivosZona) console.log("en el componente agregar se inicializa como : ", this.mostrarObjetivosZona)
...@@ -139,7 +139,6 @@ export class ObjetivosZonaComponent implements OnInit { ...@@ -139,7 +139,6 @@ export class ObjetivosZonaComponent implements OnInit {
async obtenerProvincia(id: string) { async obtenerProvincia(id: string) {
try { try {
const provincia = await this.ubicacionesService.obtenerProvinciasId(id).toPromise(); const provincia = await this.ubicacionesService.obtenerProvinciasId(id).toPromise();
console.log("provincia obtenida", provincia);
this.provincia = provincia; this.provincia = provincia;
this.mostrarOcultarService.provinciaEditado = this.provincia; this.mostrarOcultarService.provinciaEditado = this.provincia;
} catch (error) { } catch (error) {
...@@ -151,7 +150,6 @@ export class ObjetivosZonaComponent implements OnInit { ...@@ -151,7 +150,6 @@ export class ObjetivosZonaComponent implements OnInit {
obtenerCanton(id: string) { obtenerCanton(id: string) {
this.ubicacionesService.obtenerCantonId(id).subscribe( this.ubicacionesService.obtenerCantonId(id).subscribe(
canton => { canton => {
console.log("canton obtenida", canton)
this.canton = canton; this.canton = canton;
}, },
error => { error => {
...@@ -163,7 +161,6 @@ export class ObjetivosZonaComponent implements OnInit { ...@@ -163,7 +161,6 @@ export class ObjetivosZonaComponent implements OnInit {
obtenerParroquia(id:string) { obtenerParroquia(id:string) {
this.ubicacionesService.obtenerParroquiasId(id).subscribe( this.ubicacionesService.obtenerParroquiasId(id).subscribe(
parroquia => { parroquia => {
console.log("parroquia obtenida",parroquia)
this.parroquia = parroquia; this.parroquia = parroquia;
}, },
error => { error => {
......
/* Estilos para el formulario */
.formulario {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 96%;
margin: 0 auto;
background-color: white;
border-radius: 10px;
}
.botones{
width: 100px;
height: 40px;
text-align: center;
padding: 0;
}
/* Estilos para la columna única */
.columna-unico {
width: 100%;
box-sizing: border-box;
padding-right: 0;
padding-left: 0;
}
/* Estilos para los labels */
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
/* Estilos para los inputs y selects */
input[type="text"],
select {
width: 100%;
padding: 10px;
border: none;
border-bottom: 1px solid #ccc;
background-color: transparent;
font-size: 16px;
margin-bottom: 16px;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
select:focus {
outline: none;
border-color: #4caf50;
}
/* Estilos para los mensajes de error */
.error-message {
color: red;
font-size: 14px;
margin-top: 4px;
}
/* Estilos para el botón */
button {
display: block;
margin: 20px auto;
padding: 10px 20px;
background-color: rgb(71, 127, 75);
color: #fff;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: rgb(90, 159, 95);
}
/* Estilos para el contenedor principal */
.contenedor {
width: 96%;
margin-left: 2%;
margin-right: 2%;
margin-top: 10%;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: #ffffff;
position: relative;
z-index: 1;
}
/* Estilos para el contenedor del formulario */
.contenedor-dos {
margin-top: 30px;
padding: 0.9375rem 20px;
position: relative;
}
/* Estilos para el título sobremontado */
.sobremontado {
position: relative;
width: 96%;
top: -20px;
left: 2%;
background-color: #477f4b;
color: #fff;
text-align: center;
padding: 10px;
box-sizing: border-box;
margin-bottom: -50px;
z-index: 2;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Estilos para el icono de instituciones */
.icono-instituciones {
display: flex;
align-items: center;
justify-content: center;
margin-right: 5px;
font-size: 20px;
}
.volver{
position: absolute;
top: 25%;
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;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.input-container {
width: 100%;
display: flex;
flex-direction: column;
margin-bottom: 16px;
}
/* Estilos para el formulario */
.formulario {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 96%;
margin: 0 auto;
background-color: white;
border-radius: 10px;
}
.botones{
width: 100px;
height: 40px;
text-align: center;
padding: 0;
}
/* Estilos para la columna única */
.columna-unico {
width: 100%;
box-sizing: border-box;
padding-right: 0;
padding-left: 0;
}
/* Estilos para los labels */
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
/* Estilos para los inputs y selects */
input[type="text"],
select {
width: 100%;
padding: 10px;
border: none;
border-bottom: 1px solid #ccc;
background-color: transparent;
font-size: 16px;
margin-bottom: 16px;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
select:focus {
outline: none;
border-color: #4caf50;
}
/* Estilos para los mensajes de error */
.error-message {
color: red;
font-size: 14px;
margin-top: 4px;
}
/* Estilos para el botón */
button {
display: block;
margin: 20px auto;
padding: 10px 20px;
background-color: rgb(71, 127, 75);
color: #fff;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: rgb(90, 159, 95);
}
/* Estilos para el contenedor principal */
.contenedor {
width: 96%;
margin-left: 2%;
margin-right: 2%;
margin-top: 10%;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: #ffffff;
position: relative;
z-index: 1;
}
/* Estilos para el contenedor del formulario */
.contenedor-dos {
margin-top: 30px;
padding: 0.9375rem 20px;
position: relative;
}
/* Estilos para el título sobremontado */
.sobremontado {
position: relative;
width: 96%;
top: -20px;
left: 2%;
background-color: #477f4b;
color: #fff;
text-align: center;
padding: 10px;
box-sizing: border-box;
margin-bottom: -50px;
z-index: 2;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Estilos para el icono de instituciones */
.icono-instituciones {
display: flex;
align-items: center;
justify-content: center;
margin-right: 5px;
font-size: 20px;
}
.volver{
position: absolute;
top: 25%;
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;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.input-container {
width: 100%;
display: flex;
flex-direction: column;
margin-bottom: 16px;
}
<form class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<!-- Información de la institución -->
<div class="columna-unico">
<!-- Control de fechas inicio -->
<div class="save-button">
<button mat-raised-button class="botones" color="primary" [disabled]="myForm.invalid">Guardar</button>
<span class="separator"></span>
<button mat-raised-button class="botones" color="warn" (click)="cancelado()">Cancelar</button>
</div>
<div class="input-container" *ngIf="insti">
<mat-form-field>
<mat-label>Comunidad Beneficiaria</mat-label>
<input matInput placeholder="comunidad" [(ngModel)]="insti.uzytavinstituc_nombre" formControlName="comunidad">
</mat-form-field>
</div>
<div class="input-container">
<mat-form-field class="example-full-width">
<mat-label>Directos Hombres</mat-label>
<input matInput placeholder="hombre" formControlName="hombre" (input)="calcularTotalDirectos()" (blur)="calcularTotalDirectos()">
</mat-form-field>
</div>
<div class="input-container">
<mat-form-field class="example-full-width">
<mat-label>Directos Mujeres</mat-label>
<input matInput placeholder="mujer" formControlName="mujer" (input)="calcularTotalDirectos()" (blur)="calcularTotalDirectos()">
</mat-form-field>
</div>
<div class="input-container">
<mat-form-field class="example-full-width">
<mat-label>Directos Niños</mat-label>
<input matInput placeholder="nino" formControlName="nino" (input)="calcularTotalDirectos()" (blur)="calcularTotalDirectos()">
</mat-form-field>
</div>
<div class="input-container">
<mat-form-field class="example-full-width">
<mat-label>Directos Personas con Capacidades Especiales</mat-label>
<input matInput placeholder="Numero de personas con capacidades especiales" formControlName="espe" (input)="calcularTotalDirectos()" (blur)="calcularTotalDirectos()">
</mat-form-field>
</div>
<div class="input-container">
<mat-form-field class="example-full-width">
<mat-label>Total Directos</mat-label>
<input matInput placeholder="Suma del Total de beneficiarios Directos" formControlName="directo" (input)="calcularTotal()" (blur)="calcularTotal()">
</mat-form-field>
</div>
<div class="input-container">
<mat-form-field class="example-full-width">
<mat-label>Total Indirectos</mat-label>
<input matInput placeholder="Total de beneficiarios Indirectos" formControlName="indirecto" (input)="calcularTotal()" (blur)="calcularTotal()">
</mat-form-field>
</div>
<div class="input-container">
<mat-form-field class="example-full-width">
<mat-label>Total</mat-label>
<input matInput placeholder="Suma del total beneficiarios directos e indirectos" formControlName="total">
</mat-form-field>
</div>
</div>
</form>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { EditInstiComponent } from './edit-insti.component';
describe('EditInstiComponent', () => {
let component: EditInstiComponent;
let fixture: ComponentFixture<EditInstiComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ EditInstiComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(EditInstiComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { ChangeDetectorRef, Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog';
import { MatTableDataSource } from '@angular/material/table';
import { Instituciones } from 'src/app/modules/main/Models/instituciones';
import { instproy } from 'src/app/modules/main/Models/instproy';
import { InstitucionesService } from 'src/app/modules/main/services/Instituciones/instituciones.service';
import { UbicacionesService } from 'src/app/modules/main/services/Ubicaciones/ubicaciones.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { ParametrosdetService } from 'src/app/modules/main/services/parametrosdet/parametrosdet.service';
import { EnvioFormularioComponent } from '../../../../programa/opciones/envio-formulario/envio-formulario.component';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
@Component({
selector: 'vex-edit-insti',
templateUrl: './edit-insti.component.html',
styleUrls: ['./edit-insti.component.css']
})
export class EditInstiComponent implements OnInit {
/*Variables necesarias*/
myForm: FormGroup;
dataSource: MatTableDataSource<instproy>;
formularioEnviado: boolean;
instuPro: instproy;
mostrarInst: boolean = false;
insti: Instituciones;
idRecuperado: number;
constructor(
private formBuilder: FormBuilder,
private dialog: MatDialog,
private idCompartido: Compartir_idService,
private instP: ParametrosdetService,
private mostrarOcultarService: MostrarOcultarService,
private ubicacionesService: UbicacionesService,
private instiS: InstitucionesService,
private datosCompartidos: Actualiza_datosService
) {
this.dataSource = new MatTableDataSource<instproy>([]);
}
ngOnInit(): void {
this.instuPro = this.mostrarOcultarService.editInst;
this.idRecuperado = this.idCompartido.getIdInst();
this.obtenerInsti(this.instuPro.uzytavinstituc_id);
this.initializerForm();
this.mostrarInst = true;
}
initializerForm() {
this.myForm = this.formBuilder.group({
comunidad: [{ value: this.instuPro.uzytavinstituc_id, disabled: true }, Validators.required],
hombre: [{ value: this.instuPro.uzytavinstproy_dir_hombres, disabled: false }, Validators.required],
mujer: [{ value: this.instuPro.uzytavinstproy_dir_mujeres, disabled: false }, Validators.required],
nino: [{ value: this.instuPro.uzytavinstproy_dir_ninios, disabled: false }, Validators.required],
espe: [{ value: this.instuPro.uzytavinstproy_dir_discapacidad, disabled: false }, Validators.required],
directo: [{ value: this.instuPro.uzytavinstproy_DIRECTOS, disabled: true }, Validators.required],
indirecto: [{ value: this.instuPro.uzytavinstproy_indirectos, disabled: false }, Validators.required],
total: [{ value: this.instuPro.uzytavinstproy_TOTAL, disabled: true }, Validators.required],
});
}
obtenerInsti(id: number) {
this.instiS.obtenerParametrosId2(id).subscribe(data => {
this.insti = data;
});
}
calcularTotalDirectos() {
const hombres = parseInt(this.myForm.get('hombre').value ,10) || 0;
const mujeres = parseInt(this.myForm.get('mujer').value,10) || 0 ;
const nino = parseInt(this.myForm.get('nino').value,10) || 0;
const espe = parseInt(this.myForm.get('espe').value,10) || 0;
const totalDirectos = hombres + mujeres + nino + espe;
this.myForm.get('directo').setValue(totalDirectos);
}
calcularTotal(){
const directo = parseInt(this.myForm.get('directo').value,10) || 0;
const indirecto = parseInt(this.myForm.get('indirecto').value,10) || 0;
const total = directo + indirecto;
this.myForm.get('total').setValue(total);
}
onSubmit() {
if (this.myForm.valid) {
this.instuPro.uzytavproyec_id = this.idRecuperado;
this.instuPro.uzytavinstproy_dir_hombres = this.myForm.get('hombre').value;
this.instuPro.uzytavinstproy_dir_mujeres = this.myForm.get('mujer').value;
this.instuPro.uzytavinstproy_dir_ninios = this.myForm.get('nino').value;
this.instuPro.uzytavinstproy_dir_discapacidad = this.myForm.get('espe').value;
this.instuPro.uzytavinstproy_DIRECTOS = this.myForm.get('directo').value;
this.instuPro.uzytavinstproy_indirectos = this.myForm.get('indirecto').value;
this.instuPro.uzytavinstproy_TOTAL = this.myForm.get('total').value;
this.instP.modificarParametros(this.instuPro.uzytavinstproy_id, this.instuPro).subscribe(response => {
this.openModal();
this.idCompartido.ocultarFormulario2();
this.datosCompartidos.actualizarDatos(this.instuPro);
}, error => {
console.log(error)
});
}
}
cancelado() {
this.idCompartido.ocultarFormulario2();
this.mostrarInst = false;
this.myForm.enable();
this.myForm.reset();
}
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true
});
dialogRef.afterClosed().subscribe(result => {
this.formularioEnviado = true;
});
}
}
.Column {
padding-left: 0px;
padding-right: 0px;
width: 100px;
white-space: inherit;
}
.Column1 {
padding-left: 0px;
padding-right: 0px;
width: 10px;
white-space: normal;
overflow: visible;
}
.Column2 {
width: 25px;
padding-left: 0px;
padding-right: 0px;
}
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: bold;
text-transform: uppercase;
}
table td {
position: relative;
}
table td::after {
content: "";
position: absolute;
bottom: -1px;
left: 0;
width: 100%;
height: 1px;
background-color: #e0e0e0;
}
input[type="text"] {
width: 200px;
padding: 8px;
border: 1px solid #ccc;
border-radius: 5px;
margin-left: 10px;
}
.azul{
color: blue;
}
@media (max-width: 600px) {
table {
font-size: 14px;
}
table th,
table td {
padding: 8px;
}
}
<div class="container" >
<vex-edit-insti *ngIf="idCompartido.mostrar2"></vex-edit-insti>
<div class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<!-- Nro Column -->
<ng-container matColumnDef="Nro" class="Column1">
<th class="Column1 negrita" mat-header-cell *matHeaderCellDef
mat-sort-header> Nro </th>
<td class="Column1" mat-cell *matCellDef="let i = index"> {{ i+1 }}
</td>
</ng-container>
<!-- Parroquia Column -->
<!-- Dirección Column -->
<ng-container matColumnDef="Comunidad" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>
Comunidad Beneficiaria </th>
<td class="Column" mat-cell *matCellDef="let dato"> {{ getInstitucionNombre(dato.uzytavinstituc_id)}} </td>
</ng-container>
<!-- Dirección Column -->
<ng-container matColumnDef="Hombres" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>
Directos Hombres </th>
<td class="Column" mat-cell *matCellDef="let dato"> {{ dato.uzytavinstproy_dir_hombres}} </td>
</ng-container>
<!-- Representante Column -->
<ng-container matColumnDef="mujeres" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>
Directos Mujeres </th>
<td class="Column" mat-cell *matCellDef="let dato"> {{dato.uzytavinstproy_dir_mujeres}} </td>
</ng-container>
<ng-container matColumnDef="ninos" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>
Directos Niños </th>
<td class="Column" mat-cell *matCellDef="let dato"> {{dato.uzytavinstproy_dir_ninios}} </td>
</ng-container>
<ng-container matColumnDef="especiales" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>
Directos Personas con Capacidades Especiles </th>
<td class="Column" mat-cell *matCellDef="let dato"> {{dato.uzytavinstproy_dir_discapacidad}} </td>
</ng-container>
<ng-container matColumnDef="directors" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>
Total Directos </th>
<td class="Column" mat-cell *matCellDef="let dato"> {{dato.uzytavinstproy_DIRECTOS}} </td>
</ng-container>
<ng-container matColumnDef="indirectos" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>
Total Indirectos </th>
<td class="Column" mat-cell *matCellDef="let dato"> {{dato.uzytavinstproy_indirectos}} </td>
</ng-container>
<ng-container matColumnDef="total" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>
Total </th>
<td class="Column" mat-cell *matCellDef="let dato"> {{dato.uzytavinstproy_TOTAL}} </td>
</ng-container>
<ng-container matColumnDef="acciones" class="Column">
<th class="Column" mat-header-cell *matHeaderCellDef mat-sort-header>Acciones</th>
<td class="Column" mat-cell *matCellDef="let dato">
<button mat-icon-button (click)="mostrarInstu(dato.uzytavinstproy_id)">
<mat-icon class="azul">edit</mat-icon>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
</div>
</div>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ListInstiComponent } from './list-insti.component';
describe('ListInstiComponent', () => {
let component: ListInstiComponent;
let fixture: ComponentFixture<ListInstiComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ListInstiComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(ListInstiComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';
import { Instituciones } from 'src/app/modules/main/Models/instituciones';
import { instproy } from 'src/app/modules/main/Models/instproy';
import { InstitucionesService } from 'src/app/modules/main/services/Instituciones/instituciones.service';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { ParametrosdetService } from 'src/app/modules/main/services/parametrosdet/parametrosdet.service';
@Component({
selector: 'vex-list-insti',
templateUrl: './list-insti.component.html',
styleUrls: ['./list-insti.component.css']
})
export class ListInstiComponent implements OnInit {
//variables necesarias
displayedColumns: string[] = ['Nro', 'Comunidad', 'Hombres', 'mujeres', 'ninos', 'especiales','directors','indirectos','total','acciones'];
idRecuperado: number;
dataSource: MatTableDataSource<instproy>;
instuProyect: instproy[] = [];
institucion: Instituciones[] = [];
constructor(
public idCompartido: Compartir_idService,
private datosCompartidos: Actualiza_datosService,
private instP: ParametrosdetService,
private InstitucionesS: InstitucionesService,
private mostrarOcultarService: MostrarOcultarService
) {
this.dataSource = new MatTableDataSource<instproy>([]);
}
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.datosCompartidos.datos$.subscribe(() =>{
this.obtenerRegistros();
});
this.instP.parametrosActualizados.subscribe(() =>{
this.obtenerRegistros();
});
}
obtenerRegistros(){
this.instP.obtenerRegistrosRelacionados(this.idRecuperado).subscribe(data =>{
this.instuProyect = data;
this.dataSource.data = this.instuProyect;
});
this.InstitucionesS.obtenerParametros().subscribe(data =>{
this.institucion = data;
});
}
mostrarInstu(id: number) {
this.idCompartido.mostrarFormulario2();
const registroSeleccionado = this.instuProyect.find(
inst => inst.uzytavinstproy_id === id);
this.idCompartido.setIdInst(id);
this.mostrarOcultarService.editInst = registroSeleccionado;
}
getInstitucionNombre(id: number): string {
const instit = this.institucion.find(i => i.uzytavinstituc_id === id);
if (instit) {
const nombre = instit.uzytavinstituc_nombre.toLowerCase();
return nombre.charAt(0).toUpperCase() + nombre.slice(1);
}
return '';
}
}
/* Estilos para el formulario */
.formulario {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 96%;
margin: 0 auto;
background-color: white;
border-radius: 10px;
}
.botones{
width: 100px;
height: 40px;
text-align: center;
padding: 0;
}
/* Estilos para la columna única */
.columna-unico {
width: 100%;
box-sizing: border-box;
padding-right: 0;
padding-left: 0;
}
/* Estilos para los labels */
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
/* Estilos para los inputs y selects */
input[type="text"],
select {
width: 100%;
padding: 10px;
border: none;
border-bottom: 1px solid #ccc;
background-color: transparent;
font-size: 16px;
margin-bottom: 16px;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
select:focus {
outline: none;
border-color: #4caf50;
}
/* Estilos para los mensajes de error */
.error-message {
color: red;
font-size: 14px;
margin-top: 4px;
}
/* Estilos para el botón */
button {
display: block;
margin: 20px auto;
padding: 10px 20px;
background-color: rgb(71, 127, 75);
color: #fff;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: rgb(90, 159, 95);
}
/* Estilos para el contenedor principal */
.contenedor {
width: 96%;
margin-left: 2%;
margin-right: 2%;
margin-top: 10%;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: #ffffff;
position: relative;
z-index: 1;
}
/* Estilos para el contenedor del formulario */
.contenedor-dos {
margin-top: 30px;
padding: 0.9375rem 20px;
position: relative;
}
/* Estilos para el título sobremontado */
.sobremontado {
position: relative;
width: 96%;
top: -20px;
left: 2%;
background-color: #477f4b;
color: #fff;
text-align: center;
padding: 10px;
box-sizing: border-box;
margin-bottom: -50px;
z-index: 2;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Estilos para el icono de instituciones */
.icono-instituciones {
display: flex;
align-items: center;
justify-content: center;
margin-right: 5px;
font-size: 20px;
}
.volver{
position: absolute;
top: 25%;
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;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.input-container {
width: 100%;
display: flex;
flex-direction: column;
margin-bottom: 16px;
}
/* Estilos para el formulario */
.formulario {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: 96%;
margin: 0 auto;
background-color: white;
border-radius: 10px;
}
.botones{
width: 100px;
height: 40px;
text-align: center;
padding: 0;
}
/* Estilos para la columna única */
.columna-unico {
width: 100%;
box-sizing: border-box;
padding-right: 0;
padding-left: 0;
}
/* Estilos para los labels */
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
/* Estilos para los inputs y selects */
input[type="text"],
select {
width: 100%;
padding: 10px;
border: none;
border-bottom: 1px solid #ccc;
background-color: transparent;
font-size: 16px;
margin-bottom: 16px;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
select:focus {
outline: none;
border-color: #4caf50;
}
/* Estilos para los mensajes de error */
.error-message {
color: red;
font-size: 14px;
margin-top: 4px;
}
/* Estilos para el botón */
button {
display: block;
margin: 20px auto;
padding: 10px 20px;
background-color: rgb(71, 127, 75);
color: #fff;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: rgb(90, 159, 95);
}
/* Estilos para el contenedor principal */
.contenedor {
width: 96%;
margin-left: 2%;
margin-right: 2%;
margin-top: 10%;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
background-color: #ffffff;
position: relative;
z-index: 1;
}
/* Estilos para el contenedor del formulario */
.contenedor-dos {
margin-top: 30px;
padding: 0.9375rem 20px;
position: relative;
}
/* Estilos para el título sobremontado */
.sobremontado {
position: relative;
width: 96%;
top: -20px;
left: 2%;
background-color: #477f4b;
color: #fff;
text-align: center;
padding: 10px;
box-sizing: border-box;
margin-bottom: -50px;
z-index: 2;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}
/* Estilos para el icono de instituciones */
.icono-instituciones {
display: flex;
align-items: center;
justify-content: center;
margin-right: 5px;
font-size: 20px;
}
.volver{
position: absolute;
top: 25%;
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;
}
.save-button {
display: flex;
justify-content: flex-end;
margin-bottom: 16px;
}
.input-container {
width: 100%;
display: flex;
flex-direction: column;
margin-bottom: 16px;
}
<form class="formulario" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<!-- Información de la institución -->
<div class="columna-unico">
<!-- Control de fechas inicio -->
<div class="save-button">
<button mat-raised-button class="botones" color="primary" [disabled]="myForm.invalid">Guardar</button>
<span class="separator"></span>
<button mat-raised-button class="botones" color="warn" (click)="cancelado()">Cancelar</button>
</div>
<div class="input-container">
<mat-form-field>
<mat-label>Comunidad Beneficiaria</mat-label>
<input matInput placeholder="descrip" formControlName="descrip">
</mat-form-field>
</div>
<div class="input-container">
<mat-form-field class="example-full-width">
<mat-label>Ingresar el valor ejecutado durante el desarrollo del Proyecto</mat-label>
<input matInput placeholder="Ingresar el valor ejecutado durante el desarrollo del Proyecto" formControlName="valor">
<mat-error *ngIf="myForm.get('valor').hasError('valorMaximoExcedido')">El valor excede al indicador planificado</mat-error>
</mat-form-field>
</div>
</div>
</form>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { EditObjetivosEjecComponent } from './edit-objetivos-ejec.component';
describe('EditObjetivosEjecComponent', () => {
let component: EditObjetivosEjecComponent;
let fixture: ComponentFixture<EditObjetivosEjecComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ EditObjetivosEjecComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(EditObjetivosEjecComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog';
import { MatDivider } from '@angular/material/divider';
import { objetivoprograma } from 'src/app/modules/main/Models/objetivoPrograma';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { Objetivo_programaService } from 'src/app/modules/main/services/objetivo_programa/objetivo_programa.service';
import { EnvioFormularioComponent } from '../../../../programa/opciones/envio-formulario/envio-formulario.component';
@Component({
selector: 'vex-edit-objetivos-ejec',
templateUrl: './edit-objetivos-ejec.component.html',
styleUrls: ['./edit-objetivos-ejec.component.css']
})
export class EditObjetivosEjecComponent implements OnInit {
myForm: FormGroup;
formularioEnviado: boolean;
objetivoProgra: objetivoprograma;
mostrarObje: boolean = false;
idRecuperado: number;
constructor(
private formBuilder: FormBuilder,
private dialog: MatDialog,
private idCompartido: Compartir_idService,
private objS: Objetivo_programaService,
private mostrarOcultarSerivce: MostrarOcultarService,
private datosCompartidos: Actualiza_datosService
) { }
ngOnInit(): void {
this.objetivoProgra = this.mostrarOcultarSerivce.editObje;
this.idRecuperado = this.idCompartido.getIdObj();
this.initializeForm();
this.mostrarObje = true;
}
initializeForm(){
this.myForm = this.formBuilder.group({
descrip: [{value: this.objetivoProgra.uzytavobjetivo_programaobjetivo_proy, disabled: true}, Validators.required],
valor: [{value: this.objetivoProgra.uzytavobjetivo_programaindicador_valor_eje, disabled: false}, [Validators.required, this.valorMaximoValidator.bind(this)]]
});
}
valorMaximoValidator(control: FormControl) {
const valorIngresado = control.value;
const valorMaximoGuardado = this.objetivoProgra.uzytavobjetivo_programaindicador_valor;
if (valorIngresado > valorMaximoGuardado) {
return { valorMaximoExcedido: true };
} else {
return null;
}
}
onSubmit(){
if(this.myForm.valid){
this.objetivoProgra.uzytavobjetivo_programaindicador_valor_eje = this.myForm.get('valor').value;
this.objS.modificarParametros(this.objetivoProgra.uzytavobjetivo_programa_id, this.objetivoProgra).subscribe(response => {
this.openModal();
this.idCompartido.ocultarFormulario3();
this.datosCompartidos.actualizarDatos(this.objetivoProgra);
});
}
}
cancelado(){
this.idCompartido.ocultarFormulario3();
this.mostrarObje = false;
this.myForm.enable();
this.myForm.reset();
}
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true
});
dialogRef.afterClosed().subscribe(result => {
this.formularioEnviado = true;
});
}
}
.Column {
padding-left: 0px;
padding-right: 0px;
width: 100px;
white-space: inherit;
}
.Column1 {
padding-left: 0px;
padding-right: 0px;
width: 10px;
white-space: normal;
overflow: visible;
}
.Column2 {
width: 25px;
padding-left: 0px;
padding-right: 0px;
}
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: bold;
text-transform: uppercase;
}
table td {
position: relative;
}
table td::after {
content: "";
position: absolute;
bottom: -1px;
left: 0;
width: 100%;
height: 1px;
background-color: #e0e0e0;
}
input[type="text"] {
width: 200px;
padding: 8px;
border: 1px solid #ccc;
border-radius: 5px;
margin-left: 10px;
}
.azul{
color: blue;
}
@media (max-width: 600px) {
table {
font-size: 14px;
}
table th,
table td {
padding: 8px;
}
}
.separa{
margin-top: 4%;
}
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ListObjetivosEjecComponent } from './list-objetivos-ejec.component';
describe('ListObjetivosEjecComponent', () => {
let component: ListObjetivosEjecComponent;
let fixture: ComponentFixture<ListObjetivosEjecComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ListObjetivosEjecComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(ListObjetivosEjecComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';
import { objetivoprograma } from 'src/app/modules/main/Models/objetivoPrograma';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { Objetivo_programaService } from 'src/app/modules/main/services/objetivo_programa/objetivo_programa.service';
@Component({
selector: 'vex-list-objetivos-ejec',
templateUrl: './list-objetivos-ejec.component.html',
styleUrls: ['./list-objetivos-ejec.component.css']
})
export class ListObjetivosEjecComponent implements OnInit {
@ViewChild('activitySection') activitySection!: ElementRef;
displayedColumnsFin: string[] = ['descrip', 'verifica', 'tipo', 'indica', 'indicaPlanValor', 'indicaEjecu', 'acciones'];
idRecuperado: number;
dataSourceFin: MatTableDataSource<objetivoprograma>;
dataSourceGeneral: MatTableDataSource<objetivoprograma>;
dataSourceEspe: MatTableDataSource<objetivoprograma>;
dataSourceActi: MatTableDataSource<objetivoprograma>;
objetivoPrograma: objetivoprograma[] = [];
objetivoProgramaGeneral: objetivoprograma[] = [];
objetivoProgramaEspe: objetivoprograma[] = [];
objetivoProgramaActi: objetivoprograma[] = [];
constructor(
private mostrarOcultarService: MostrarOcultarService,
public idCompartido: Compartir_idService,
private datosCompartidos: Actualiza_datosService,
private objetivoS: Objetivo_programaService
) {
this.dataSourceFin = new MatTableDataSource<objetivoprograma>([]);
this.dataSourceGeneral = new MatTableDataSource<objetivoprograma>([]);
this.dataSourceEspe = new MatTableDataSource<objetivoprograma>([]);
this.dataSourceActi = new MatTableDataSource<objetivoprograma>([]);
}
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.datosCompartidos.datos$.subscribe(() =>{
this.obtenerRegistros();
});
this.objetivoS.parametrosActualizados.subscribe(() => {
this.obtenerRegistros();
});
}
obtenerRegistros(){
this.objetivoS.obtenerParametros().subscribe(data => {
//llenado de los arreglos
this.objetivoPrograma = data.filter(item => item.uzytavobjetivo_programatipo === 1 && item.uzytavproyec_id === this.idRecuperado);
this.objetivoProgramaGeneral = data.filter(item => item.uzytavobjetivo_programatipo === 2 && item.uzytavproyec_id === this.idRecuperado);
this.objetivoProgramaEspe = data.filter(item => item.uzytavobjetivo_programatipo === 3 && item.uzytavproyec_id === this.idRecuperado);
this.objetivoProgramaActi = data.filter(item => item.uzytavobjetivo_programatipo === 4 && item.uzytavproyec_id === this.idRecuperado);
//data source
this.dataSourceFin.data = this.objetivoPrograma;
this.dataSourceGeneral.data = this.objetivoProgramaGeneral;
this.dataSourceEspe.data = this.objetivoProgramaEspe;
this.dataSourceActi.data = this.objetivoProgramaActi;
});
}
mostrarObjetivoFin(id: number) {
this.idCompartido.mostrarFormulario3();
const registroSeleccionado = this.objetivoPrograma.find(
objet => objet.uzytavobjetivo_programa_id === id);
this.idCompartido.setIdObj(id);
this.mostrarOcultarService.editObje = registroSeleccionado;
this.scrollIntoView();
}
mostrarObjetivoGeneral(id: number) {
this.idCompartido.mostrarFormulario3();
const registroSeleccionado = this.objetivoProgramaGeneral.find(
objet => objet.uzytavobjetivo_programa_id === id);
this.idCompartido.setIdObj(id);
this.mostrarOcultarService.editObje = registroSeleccionado;
this.scrollIntoView();
}
mostrarObjetivoEspecifico(id: number) {
this.idCompartido.mostrarFormulario3();
const registroSeleccionado = this.objetivoProgramaEspe.find(
objet => objet.uzytavobjetivo_programa_id === id);
this.idCompartido.setIdObj(id);
this.mostrarOcultarService.editObje = registroSeleccionado;
this.scrollIntoView();
}
mostrarObjetivoActividad(id: number) {
this.idCompartido.mostrarFormulario3();
const registroSeleccionado = this.objetivoProgramaActi.find(
objet => objet.uzytavobjetivo_programa_id === id);
this.idCompartido.setIdObj(id);
this.mostrarOcultarService.editObje = registroSeleccionado;
this.scrollIntoView();
}
especificarValor(tipo: number) {
if (tipo === 1) {
return 'Valor';
} else {
return 'Porcentaje';
}
}
scrollIntoView() {
if (this.activitySection && this.activitySection.nativeElement) {
this.activitySection.nativeElement.scrollIntoView({ behavior: 'smooth' });
}
}
}
...@@ -15,31 +15,43 @@ ...@@ -15,31 +15,43 @@
<mat-card-content> <mat-card-content>
<div> <div>
<label class="label-negrita"> Productos y/o servicios generados por el proyecto:</label> <label class="label-negrita"> <strong>Productos y/o servicios generados por el proyecto:</strong> </label>
<ckeditor formControlName="productoCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor> <ckeditor formControlName="productoCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
</div> </div>
<div class="editor-separator"></div> <div class="editor-separator"></div>
<div> <div>
<label class="label-negrita"> Bienes a favor de la ESPE:</label> <label class="label-negrita"> <strong>Bienes a favor de la ESPE:</strong></label>
<ckeditor formControlName="bienesCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor> <ckeditor formControlName="bienesCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
</div> </div>
<div class="editor-separator"></div> <div class="editor-separator"></div>
<div> <div>
<label class="label-negrita"> Resultados del proyecto:</label> <label class="label-negrita"> <strong>Resultados del proyecto:</strong></label>
<ckeditor formControlName="resultadoCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor> <ckeditor formControlName="resultadoCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
</div> </div>
<div class="editor-separator"></div> <div class="editor-separator"></div>
<div> <div>
<label class="label-negrita"> Otras aplicaciones del producto y/o servicios:</label> <label class="label-negrita"> <strong>Otras aplicaciones del producto y/o servicios:</strong></label>
<ckeditor formControlName="servicioCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor> <ckeditor formControlName="servicioCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
</div> </div>
<div class="editor-separator"></div> <div class="editor-separator"></div>
<div> <div>
<label class="label-negrita"> Impacto futuro del proyecto:</label> <label class="label-negrita"> <strong>Impacto futuro del proyecto:</strong></label>
<ckeditor formControlName="impactoCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor> <ckeditor formControlName="impactoCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
</div> </div>
<div class="editor-separator"></div>
<div>
<label class="label-negrita"> <strong>Restricciones que limitan el impacto del proyecto:</strong></label>
<ckeditor formControlName="restricCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
</div>
<div class="editor-separator"></div>
<div>
<label class="label-negrita"> <strong>Comentarios Generales:</strong></label>
<ckeditor formControlName="comenCierre" class="custom-ckeditor" [disabled]="!isEditorEnabled" [style.height]="editorHeight" [editor]="Editor"></ckeditor>
</div>
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
</form> </form>
......
...@@ -49,7 +49,9 @@ export class ResultadosComponent implements OnInit { ...@@ -49,7 +49,9 @@ export class ResultadosComponent implements OnInit {
bienesCierre: [this.proyectos.uzytavproyec_cierre_bien, Validators.required], bienesCierre: [this.proyectos.uzytavproyec_cierre_bien, Validators.required],
resultadoCierre: [this.proyectos.uzytavproyec_cierre_resul, Validators.required], resultadoCierre: [this.proyectos.uzytavproyec_cierre_resul, Validators.required],
servicioCierre: [this.proyectos.uzytavproyec_cierre_aplic, Validators.required], servicioCierre: [this.proyectos.uzytavproyec_cierre_aplic, Validators.required],
impactoCierre: [this.proyectos.uzytavproyec_cierre_imp, Validators.required] impactoCierre: [this.proyectos.uzytavproyec_cierre_imp, Validators.required],
restricCierre: [this.proyectos.uzytavproyec_cierre_rest, Validators.required],
comenCierre: [this.proyectos.uzytavproyec_cierre_comen, Validators.required]
}); });
} }
...@@ -62,7 +64,9 @@ export class ResultadosComponent implements OnInit { ...@@ -62,7 +64,9 @@ export class ResultadosComponent implements OnInit {
bienesCierre: this.proyectos.uzytavproyec_cierre_bien, bienesCierre: this.proyectos.uzytavproyec_cierre_bien,
resultadoCierre: this.proyectos.uzytavproyec_cierre_resul, resultadoCierre: this.proyectos.uzytavproyec_cierre_resul,
servicioCierre: this.proyectos.uzytavproyec_cierre_aplic, servicioCierre: this.proyectos.uzytavproyec_cierre_aplic,
impactoCierre: this.proyectos.uzytavproyec_cierre_imp impactoCierre: this.proyectos.uzytavproyec_cierre_imp,
restricCierre: this.proyectos.uzytavproyec_cierre_rest,
comenCierre: this.proyectos.uzytavproyec_cierre_comen
}); });
}); });
} else { } else {
...@@ -78,6 +82,8 @@ export class ResultadosComponent implements OnInit { ...@@ -78,6 +82,8 @@ export class ResultadosComponent implements OnInit {
this.proyectos.uzytavproyec_cierre_resul = this.myForm.get('resultadoCierre').value; this.proyectos.uzytavproyec_cierre_resul = this.myForm.get('resultadoCierre').value;
this.proyectos.uzytavproyec_cierre_aplic = this.myForm.get('servicioCierre').value; this.proyectos.uzytavproyec_cierre_aplic = this.myForm.get('servicioCierre').value;
this.proyectos.uzytavproyec_cierre_imp = this.myForm.get('impactoCierre').value; this.proyectos.uzytavproyec_cierre_imp = this.myForm.get('impactoCierre').value;
this.proyectos.uzytavproyec_cierre_rest = this.myForm.get('restricCierre').value;
this.proyectos.uzytavproyec_cierre_comen = this.myForm.get('comenCierre').value;
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;
......
...@@ -12,13 +12,13 @@ ...@@ -12,13 +12,13 @@
</div> </div>
<div class="input-container"> <div class="input-container">
<mat-form-field> <!-- <mat-form-field>
<mat-label>Fecha de Subida:</mat-label> <mat-label>Fecha de Subida:</mat-label>
<input matInput [matDatepicker]="pickerInicio" placeholder="Seleccione una fecha de Subida" <input matInput [matDatepicker]="pickerInicio" placeholder="Seleccione una fecha de Subida"
formControlName="fechaInicio" required> formControlName="fechaInicio" required>
<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-form-field> </mat-form-field>-->
</div> </div>
<!-- Control de PDF --> <!-- Control de PDF -->
......
...@@ -48,7 +48,7 @@ export class AddAnexosImagenesComponent implements OnInit { ...@@ -48,7 +48,7 @@ export class AddAnexosImagenesComponent implements OnInit {
this.myForm = this.formBuilder.group({ this.myForm = this.formBuilder.group({
archivo: [{ value: '', disabled: true }, Validators.required], archivo: [{ value: '', disabled: true }, Validators.required],
fechaInicio: [{ value: '', disabled: true }, Validators.required], //fechaInicio: [{ value: '', disabled: true }, Validators.required],
}); });
} }
...@@ -80,7 +80,9 @@ export class AddAnexosImagenesComponent implements OnInit { ...@@ -80,7 +80,9 @@ export class AddAnexosImagenesComponent implements OnInit {
onSubmit() { onSubmit() {
if (this.myForm.valid) { if (this.myForm.valid) {
this.anexosImagenes.uzytavproyec_id = this.idRecuperado; this.anexosImagenes.uzytavproyec_id = this.idRecuperado;
this.anexosImagenes.uzytavanexospr_fech_subida = this.myForm.value.fechaInicio console.log('prueba imagen', this.anexosImagenes.uzytavproyec_id)
//this.anexosImagenes.uzytavanexospr_fech_subida = this.myForm.value.fechaInicio;
//this.anexosImagenes.uzytavanexospr_fech_subida = new Date();
this.anexosImagenesService.guardarParametrosSeparados(this.file, this.anexosImagenes).subscribe( this.anexosImagenesService.guardarParametrosSeparados(this.file, this.anexosImagenes).subscribe(
response => { response => {
this.openModal(); this.openModal();
...@@ -103,7 +105,7 @@ export class AddAnexosImagenesComponent implements OnInit { ...@@ -103,7 +105,7 @@ export class AddAnexosImagenesComponent implements OnInit {
cambiar() { cambiar() {
this.cambio = true; this.cambio = true;
this.myForm.get('fechaInicio').enable(); //this.myForm.get('fechaInicio').enable();
this.myForm.get('archivo').enable(); this.myForm.get('archivo').enable();
} }
......
<div class="container">
<mat-card>
<mat-card-header>
<mat-card-title>Carta de Compromiso de la Comunidad</mat-card-title>
</mat-card-header>
<mat-card-content>
<mat-card-actions class="button-container">
<input type="file" (change)="handleFileInput($event)" accept=".pdf" />
<div>
<button mat-raised-button class="sep" color="primary" (click)="guardarPDF()">Guardar</button>
</div>
</mat-card-actions>
</mat-card-content>
</mat-card>
</div>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CartaCompromisoComuComponent } from './carta-compromiso-comu.component';
describe('CartaCompromisoComuComponent', () => {
let component: CartaCompromisoComuComponent;
let fixture: ComponentFixture<CartaCompromisoComuComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ CartaCompromisoComuComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(CartaCompromisoComuComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'vex-carta-compromiso-comu',
templateUrl: './carta-compromiso-comu.component.html',
styleUrls: ['./carta-compromiso-comu.component.css']
})
export class CartaCompromisoComuComponent implements OnInit {
archivoPDF: File | null = null;
finalizado: boolean = false;
ngOnInit(): void {
}
onSubmit() {}
handleFileInput(event: any) {
this.archivoPDF = event.target.files[0];
if (this.archivoPDF) {
console.log('Archivo seleccionado:', this.archivoPDF);
}
}
guardarPDF() {
if (this.archivoPDF) {
// Aquí puedes realizar la lógica para enviar el archivo a la base de datos
// Por ejemplo, si estás usando un servicio para comunicarte con la base de datos:
// this.miServicio.guardarPDFEnBaseDeDatos(this.archivoPDF);
console.log('Guardando archivo en la base de datos:', this.archivoPDF);
} else {
console.log('No se ha seleccionado ningún archivo PDF para guardar.');
}
}
}
.form-row {
display: flex;
}
.form-column {
flex: 1;
margin: 0 10px;
max-width: 100%;
}
.contenedor-dos {
margin-top: 30px;
padding: 0.9375rem 20px;
position: relative;
width: 100%;
}
.example-radio-group {
display: flex;
flex-direction: column;
margin: 15px 0;
align-items: flex-start;
}
.example-section {
margin: 12px 0;
}
.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%;
}
.separa {
margin-left: 16px;
}
.sepa{
margin-bottom: 32px;
}
.sube{
margin-top: 10px;
}
<div class="container">
<form class="example-form" [formGroup]="myForm" (ngSubmit)="onSubmit()">
<mat-card>
<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>
<div class="form-row">
<div class="form-column">
<div>
<mat-label><strong>TIPO DE ENTIDAD</strong></mat-label>
</div>
<div class="sepa">
<mat-radio-group class="sube" formControlName="entidad">
<mat-radio-button *ngFor="let entidad of entidad" [value]="entidad.uzytparametros_det_id">{{ entidad.uzytparametros_det_descripcion}} </mat-radio-button>
</mat-radio-group>
</div>
<mat-label><strong>INSTITUCIÓN O COMUNIDAD</strong></mat-label>
<mat-form-field>
<mat-label>Nombre:</mat-label>
<mat-select formControlName="nombreI"
placeholder="Nombre del Proyecto" (selectionChange)="onInstitucionSelected($event.value)">
<mat-option *ngFor="let item2 of institu" [value]="item2.uzytavinstituc_id">{{item2.uzytavinstituc_nombre}}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-label>Provincia:</mat-label>
<input matInput formControlName="provinciaI">
</mat-form-field>
<mat-form-field>
<mat-label>Dirección</mat-label>
<input matInput formControlName="direccionI">
</mat-form-field>
<mat-form-field>
<mat-label>Tipo de Organización</mat-label>
<mat-select formControlName="organizacionI">
<mat-option *ngFor="let item of orga" [value]="item.uzytparametros_det_id">{{item.uzytparametros_det_descripcion}}</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="form-column">
<mat-label><strong>REPRESENTANTE LEGAL Y/O RESPONSABLE</strong></mat-label>
<mat-form-field>
<mat-label>Nombres</mat-label>
<input matInput [disabled]="true" formControlName="nombreR">
</mat-form-field>
<mat-form-field>
<mat-label>Apellido</mat-label>
<input matInput [disabled]="true" formControlName="apellidoR">
</mat-form-field>
<mat-form-field>
<mat-label>Cargo</mat-label>
<input matInput [disabled]="true" formControlName="cargoR">
</mat-form-field>
<mat-form-field>
<mat-label>Correo Electronico</mat-label>
<input matInput placeholder="Correo Institucional"
formControlName="correoR">
</mat-form-field>
<mat-form-field>
<mat-label>Telefono</mat-label>
<input matInput placeholder="Telefono Director"
formControlName="telefonoR">
</mat-form-field>
<mat-form-field>
<mat-label>Declaración</mat-label>
<input matInput formControlName="declaracion">
</mat-form-field>
</div>
</div>
</mat-card-content>
</mat-card>
</form>
</div>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AddCompromisoComponent } from './add-compromiso.component';
describe('AddCompromisoComponent', () => {
let component: AddCompromisoComponent;
let fixture: ComponentFixture<AddCompromisoComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AddCompromisoComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(AddCompromisoComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit, Output,EventEmitter } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Instituciones } from 'src/app/modules/main/Models/instituciones';
import { instproy } from 'src/app/modules/main/Models/instproy';
import { parametrosdet } from 'src/app/modules/main/Models/parametrosdet';
import { InstitucionesService } from 'src/app/modules/main/services/Instituciones/instituciones.service';
import { ParametrosdetService } from 'src/app/modules/main/services/parametrosdet/parametrosdet.service';
import { EnvioFormularioComponent } from '../../../../programa/opciones/envio-formulario/envio-formulario.component';
import { MatDialog } from '@angular/material/dialog';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
@Component({
selector: 'vex-add-compromiso',
templateUrl: './add-compromiso.component.html',
styleUrls: ['./add-compromiso.component.css']
})
export class AddCompromisoComponent implements OnInit {
myForm: FormGroup;
idRecuperado: number;
formularioEnviado: boolean;
//enviar o comunicar entre componentes con el emiter
@Output() formularioGuardado = new EventEmitter<void>();
//arreglos
entidad: parametrosdet[] = [];
orga: parametrosdet[] = [];
institu: Instituciones[] = [];
constructor(
private formBuilder: FormBuilder,
private instP: ParametrosdetService,
private instituS: InstitucionesService,
private instproyM: instproy,
private dialog: MatDialog,
private datosCompartidos: Actualiza_datosService
) { }
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.obtenerRegistros();
this.myForm = this.formBuilder.group({
entidad: ['', Validators.required],
nombreI: ['', Validators.required],
provinciaI: [{ value: '', disabled: true }],
direccionI: [{ value: '', disabled: true }],
organizacionI: [],
nombreR: [{ value: '', disabled: true }],
apellidoR: [{ value: '', disabled: true }],
cargoR: [{ value: '', disabled: true }],
correoR: [{ value: '', disabled: true }],
telefonoR: [{ value: '', disabled: true }],
declaracion: ['', Validators.required]
});
}
onSubmit() {
if (this.myForm.valid) {
try {
this.instproyM.uzytavproyec_id = this.idRecuperado;
this.instproyM.uzytparametros_det_id_entidad = this.myForm.get('entidad').value;
this.instproyM.uzytavinstituc_id = this.myForm.get('nombreI').value;
this.instproyM.uzytparametros_det_id_organizacion = this.myForm.get('organizacionI').value;
this.instproyM.uzytavinstproy_declaracion = this.myForm.get('declaracion').value;
this.instP.guardarParametros(this.instproyM).subscribe(response => {
this.openModal();
this.instP.parametrosActualizados.next();
this.datosCompartidos.actualizarDatos(this.instproyM);
});
} catch (error) {
console.error('Error al enviar los datos:', error);
}
}
}
cancelar() {
}
obtenerRegistros() {
this.instP.obtenerParametros().subscribe(data => {
this.entidad = data.filter(item => item.uzytparametros_det_id_alt === '1');
this.orga = data.filter(item => item.uzytparametros_det_id_alt === '2');
});
this.instituS.obtenerParametros().subscribe(data => {
this.institu = data;
});
}
onInstitucionSelected(selectedInstitucionId: number) {
const selectedInstitucion = this.institu.find(item => item.uzytavinstituc_id === selectedInstitucionId);
if (selectedInstitucion) {
this.myForm.get('direccionI')?.setValue(selectedInstitucion.uzytavinstituc_calle);
this.myForm.get('nombreR')?.setValue(selectedInstitucion.uzytavinstituc_nombre);
this.myForm.get('apellidoR')?.setValue(selectedInstitucion.uzytavinstituc_apellirl);
this.myForm.get('cargoR')?.setValue(selectedInstitucion.uzytavinstituc_cargorl);
this.myForm.get('correoR')?.setValue(selectedInstitucion.uzytavinstituc_mailrl1);
this.myForm.get('telefonoR')?.setValue(selectedInstitucion.uzytavinstituc_telefono);
}
}
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true
});
dialogRef.afterClosed().subscribe(result => {
console.log('La ventana modal se ha cerrado');
this.formularioEnviado = true;
});
}
}
.modal-container {
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: 10px;
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1);
max-width: 400px; /* Ajusta el ancho máximo del formulario */
width: 100%;
}.modal-container {
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: 10px;
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1);
max-width: 400px; /* Ajusta el ancho máximo del formulario */
width: 100%;
}
.modal-content h2 {
margin-top: 0;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
font-weight: bold;
}
.form-group input[type="file"] {
display: block;
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 5px;
background-color: white;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1);
cursor: pointer;
outline: none;
}
.form-group input[type="file"]:hover {
border-color: #007bff;
}
.form-group input[type="file"]:focus {
border-color: #007bff;
}
.form-actions {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 15px;
}
.form-actions button {
padding: 8px 15px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.form-actions button[type="submit"] {
background-color: #28a745; /* Verde */
color: white;
}
.form-actions button[type="submit"]:hover {
background-color: #218838; /* Verde más oscuro al pasar el mouse */
}
.form-actions button[type="button"] {
background-color: #ccc;
}
.form-actions button[type="button"]:hover {
background-color: #b3b3b3;
}
.modal-content h2 {
margin-top: 0;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
font-weight: bold;
}
.form-group input[type="file"] {
display: block;
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 5px;
}
.form-actions {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 15px;
}
.form-actions button {
padding: 8px 15px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.form-actions button[type="submit"] {
background-color: #007bff;
color: white;
}
.form-actions button[type="submit"]:hover {
background-color: #0056b3;
}
.form-actions button[type="button"] {
background-color: #ccc;
}
.form-actions button[type="button"]:hover {
background-color: #b3b3b3;
}
<div class="modal-container">
<div class="modal-content">
<h2>Documento (Convenio o Carta de Participación) (.pdf)</h2>
<form (ngSubmit)="submitForm()" #documentForm="ngForm">
<div class="form-group">
<label for="pdfFile">Seleccionar archivo PDF:</label>
<input type="file" id="pdfFile" name="pdfFile" accept=".pdf" required #pdfInput>
</div>
<div class="form-actions">
<button type="submit" [disabled]="!documentForm.form.valid">Guardar</button>
<button type="button" (click)="cerrarModal()">Cerrar</button>
</div>
</form>
</div>
</div>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AddDocumentosComponent } from './add-documentos.component';
describe('AddDocumentosComponent', () => {
let component: AddDocumentosComponent;
let fixture: ComponentFixture<AddDocumentosComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AddDocumentosComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(AddDocumentosComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
@Component({
selector: 'vex-add-documentos',
templateUrl: './add-documentos.component.html',
styleUrls: ['./add-documentos.component.css']
})
export class AddDocumentosComponent implements OnInit {
constructor(
private dialogRef: MatDialogRef<AddDocumentosComponent>,
@Inject(MAT_DIALOG_DATA) public data: { idConf: number }
) { }
ngOnInit(): void {
console.log('ID recibido:', this.data.idConf);
}
submitForm(){
this.dialogRef.close();
}
cerrarModal(){
this.dialogRef.close();
}
}
/* Estilos generales */
.container {
width: 100%;
max-width: 1200px; /* Cambia este valor según tus necesidades */
margin: 0 auto;
padding: 20px;
box-sizing: border-box;
}
/* Estilos de la tabla */
.table-container {
overflow-x: auto;
}
table {
width: 100%;
max-width: 100%;
border-collapse: collapse;
font-family: 'Roboto', sans-serif;
color: #333;
border: 1px solid #e0e0e0;
}
table th,
table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #e0e0e0;
}
table th {
background-color: rgb(248, 249, 250);
font-weight: bold;
text-transform: uppercase;
}
/* Ajuste de la celda que contiene el componente expandido */
td.expanded-cell {
padding: 0;
}
/* Estilos del botón de expansión */
.button-expand {
padding: 0;
border: none;
background-color: transparent;
cursor: pointer;
}
.button-expand mat-icon {
font-size: 24px;
}
/* Estilos del componente expandido */
.expanded-content {
padding: 10px;
background-color: white;
}
/* Estilos del botón de eliminación */
.button-delete {
border: none;
background-color: transparent;
cursor: pointer;
}
.button-delete mat-icon {
color: red;
}
/* Estilos del contenedor principal */
.contenedorP {
width: 100%;
margin: 10px auto;
border-radius: 10px;
text-align: center;
background-color: white;
}
/* Estilos de los botones redondos */
.rounder {
border-radius: 50%;
background-color: rgb(71, 127, 75);
display: flex;
align-items: center;
justify-content: center;
padding: 0;
width: 36px;
height: 36px;
border: none;
outline: none;
cursor: pointer;
}
.rounder mat-icon {
font-size: 24px;
color: #fff;
}
/* Estilos de los íconos de edición */
.colorEditar {
color: blue;
}
.colorEditar svg {
fill: blue;
}
/* Estilos del encabezado de la tabla */
.colorsito {
background-color: rgb(248, 249, 250);
}
/* Media Queries para pantallas pequeñas */
@media (max-width: 768px) {
table th,
table td {
padding: 8px;
}
}
@media (max-width: 1200px) {
table th,
table td {
padding: 10px;
}
}
<div class="contenedorP">
<div>
<mat-card class="card">
<table>
<thead class="colorsito">
<tr>
<th class="colorsito"></th>
<th class="colorsito">Nro</th>
<th class="colorsito">Tipo</th>
<th class="colorsito">Nombre Institución</th>
<th class="colorsito">Ubicación</th>
<th class="colorsito">Tipo de Organización</th>
<th class="colorsito">Representante Legal</th>
<th class="colorsito">Declaración</th>
<th class="colorsito">Acciones</th>
</tr>
</thead>
<tbody>
<ng-container *ngFor="let dato of instuProyect; let i = index">
<tr id="fila-{{ i }}">
<td>
<button (click)="toggleDiv(i)">
<mat-icon>{{ mostrarDiv[i] ? 'keyboard_arrow_down' :
'keyboard_arrow_right' }}</mat-icon>
</button>
</td>
<td>{{ i+1}}</td>
<td>{{ getNombrePar(dato.uzytparametros_det_id_entidad) }}</td>
<td>{{getInstitucionNombre(dato.uzytavinstituc_id)}}</td>
<td>{{getIdParroquiaCanton(dato.uzytavinstituc_id)+ ''+'-' +''+
getIdParroquiaN(dato.uzytavinstituc_id)+ ''+'-' +''+ getInstitucionDireccion(dato.uzytavinstituc_id) }}</td>
<td>{{ getNombrePar(dato.uzytparametros_det_id_organizacion)}}</td>
<td>{{getInstitucionNombreRepresentante(dato.uzytavinstituc_id) }}</td>
<td>{{dato.uzytavinstproy_declaracion }}</td>
<td>
<button>
<mat-icon color="warn"
(click)="eliminarParametro(dato.uzytavinstproy_id)">delete</mat-icon>
</button>
</td>
</tr>
<tr *ngIf="mostrarDiv[i]">
<div></div>
<td colspan="5">
<vex-list-documentos [idConf]="dato.uzytavinstproy_id"></vex-list-documentos>
</td>
</tr>
</ng-container>
</tbody>
</table>
</mat-card>
</div>
</div>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ListCompromisoComponent } from './list-compromiso.component';
describe('ListCompromisoComponent', () => {
let component: ListCompromisoComponent;
let fixture: ComponentFixture<ListCompromisoComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ListCompromisoComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(ListCompromisoComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';
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';
import { Instituciones } from 'src/app/modules/main/Models/instituciones';
import { instproy } from 'src/app/modules/main/Models/instproy';
import { parametrosdet } from 'src/app/modules/main/Models/parametrosdet';
import { InstitucionesService } from 'src/app/modules/main/services/Instituciones/instituciones.service';
import { UbicacionesService } from 'src/app/modules/main/services/Ubicaciones/ubicaciones.service';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { ParametrosdetService } from 'src/app/modules/main/services/parametrosdet/parametrosdet.service';
@Component({
selector: 'vex-list-compromiso',
templateUrl: './list-compromiso.component.html',
styleUrls: ['./list-compromiso.component.css']
})
export class ListCompromisoComponent implements OnInit {
idRecuperado: number;
dataSource: MatTableDataSource<instproy>;
//arreglo para la información
instuProyect: instproy[] = [];
institucion: Instituciones[] = [];
parroquia: Parroquia[] = [];
provincia: Provincia[] = [];
canton: Canton[] = [];
parat: parametrosdet[] = [];
//arreglo de los nombres de las columnas
displayedColumns: string[] = ['Expandir','Nro', 'Tipo', 'Nombre', 'Provincia', 'Direción', 'TipoO', 'Representante', 'Declaración', 'Acciones'];
constructor(
private datosCompartidos: Actualiza_datosService,
private instP: ParametrosdetService,
private ubicacionesS: UbicacionesService,
private InstitucionesS: InstitucionesService,
private paratS: ParametrosdetService
) {
this.dataSource = new MatTableDataSource<instproy>([]);
}
ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.datosCompartidos.datos$.subscribe(() => {
this.obtenerRegistros();
});
this.instP.parametrosActualizados.subscribe(() => {
this.obtenerRegistros();
});
}
obtenerRegistros() {
this.instP.obtenerRegistrosRelacionados(this.idRecuperado).subscribe(data => {
this.instuProyect = data;
this.dataSource.data = this.instuProyect;
});
this.InstitucionesS.obtenerParametros().subscribe(data => {
this.institucion = data;
});
this.ubicacionesS.obtenerParro().subscribe(data => {
this.parroquia = data;
});
this.ubicacionesS.obtenerProvincias().subscribe(prov => {
this.provincia = prov;
});
this.ubicacionesS.obtenerCant().subscribe(cant => {
this.canton = cant;
});
this.paratS.obtenerParametros().subscribe(par => {
this.parat = par;
});
}
mostrarDiv: boolean[] = [];
toggleDiv(i: number) {
this.mostrarDiv[i] = !this.mostrarDiv[i];
}
getNombrePar(id: number):string{
const busca = this.parat.find(i=> i.uzytparametros_det_id === id)
if(busca){
const nombre = busca.uzytparametros_det_descripcion
return nombre;
}
return '';
}
getInstitucionNombreRepresentante(id: number): string {
const instit = this.institucion.find(i => i.uzytavinstituc_id === id);
if (instit) {
const nombre = instit.uzytavinstituc_nomrepl+ ' ' + instit.uzytavinstituc_apellirl;
return nombre;
}
return '';
}
getInstitucionNombre(id: number): string {
const instit = this.institucion.find(i => i.uzytavinstituc_id === id);
if (instit) {
const nombre = instit.uzytavinstituc_nombre.toLowerCase();
return nombre.charAt(0).toUpperCase() + nombre.slice(1);
}
return '';
}
getInstitucionDireccion(id: number): string {
const instit = this.institucion.find(i => i.uzytavinstituc_id === id);
if (instit) {
const nombre = instit.uzytavinstituc_calle.toLowerCase();
return nombre.charAt(0).toUpperCase() + nombre.slice(1);
}
return '';
}
getIdParroquiaCanton(parroquiaId: number): string {
const parroquia = this.institucion.find(p => p.uzytavinstituc_id === parroquiaId);
if (parroquia) {
const nombre = parroquia.uzytparroquia_id;
return this.getParroquia(nombre);
}
return '';
}
getParroquia(id: string): string {
const canton = this.parroquia.find(p => p.uzytparroquia_id === id);
if(canton){
const nombre = canton.uzytcanton_id;
return this.getCantonNombre(nombre);
}
return '';
}
getCantonNombre(id: string): string {
const canton = this.canton.find(c => c.uzytcanton_id === id);
if (canton) {
const nombre = canton.uzytcantonnombre.toLowerCase();
return nombre.charAt(0).toUpperCase() + nombre.slice(1);
}
return '';
}
getIdParroquiaN(id: number): string {
const parro = this.institucion.find(i => i.uzytavinstituc_id === id);
if (parro) {
const parroId = parro.uzytparroquia_id;
return this.getParroquiaNombre(parroId);
}
return '';
}
getParroquiaNombre(parroquiaId: string): string {
const parroquia = this.parroquia.find(p => p.uzytparroquia_id === parroquiaId);
if (parroquia) {
const nombre = parroquia.uzytparroquia_nombre.toLowerCase();
return nombre.charAt(0).toUpperCase() + nombre.slice(1);
}
return '';
}
eliminarParametro(id: number) {
const confirmacion = confirm('¿Desea eliminar el registro?');
if (confirmacion) {
this.instP.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');
}
);
}
}
}
/* Estilos del componente hijo */
.principal {
width: 100%;
max-width: 100%;
border-collapse: collapse;
}
.principal th,
.principal td {
text-align: left;
border-bottom: 1px solid #e0e0e0;
word-break: break-word;
}
.principal th {
font-size: 14px; /* Ajusta el tamaño de fuente de los encabezados */
}
.colorsito {
background-color: rgb(248, 249, 250);
}
.rounder-nuevo {
border-radius: 50%;
background-color: rgb(71, 127, 75);
display: flex;
align-items: center;
justify-content: center;
padding: 0;
width: 30px;
height: 30px;
border: none;
outline: none;
cursor: pointer;
margin-left: 5px;
}
.warn svg,
.azul svg {
fill: blue;
}
.titulo {
display: flex;
align-items: center;
}
.titulo-texto {
font-weight: bold;
font-size: 15px;
font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
margin-right: 10px;
}
.white-icon {
color: white;
}
<div class="titulo">
<span class="titulo-texto">Documentos: </span>
<button class="rounder-nuevo" (click)="GuardarParametro()">
<mat-icon class="white-icon">add</mat-icon>
</button>
</div>
<table class="principal">
<thead class="colorsito">
<tr>
<th class="colorsito">Nro</th>
<th class="colorsito" style="min-width:200px">Documento (Convenio o Carta de participación)</th>
<th class="colorsito" style="min-width:200px" >Acciones</th>
</tr>
</thead>
<tbody>
<ng-container *ngIf="documentoInst.length > 0; else noRegistros">
<tr *ngFor="let dato of documentoInst; let i = index" >
<td>{{ i+1 }}</td>
<td>{{ dato.UZYTAVDOCOMPAR_NOMBRE_DOC }}</td>
<td>
<button>
<mat-icon class="warn" (click)="eliminarPDF()">delete</mat-icon>
</button>
<button>
<mat-icon color="azul" (click)="descargar()">download</mat-icon>
</button>
</td>
</tr>
</ng-container>
<ng-template #noRegistros>
<tr>
<td colspan="3" style="text-align: center;">No existen registros</td>
</tr>
</ng-template>
</tbody>
</table>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ListDocumentosComponent } from './list-documentos.component';
describe('ListDocumentosComponent', () => {
let component: ListDocumentosComponent;
let fixture: ComponentFixture<ListDocumentosComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ListDocumentosComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(ListDocumentosComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit,Input } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { docompar } from 'src/app/modules/main/Models/docompar';
import { AddDocumentosComponent } from '../add-documentos/add-documentos.component';
@Component({
selector: 'vex-list-documentos',
templateUrl: './list-documentos.component.html',
styleUrls: ['./list-documentos.component.css']
})
export class ListDocumentosComponent implements OnInit {
@Input() idConf: number;
documentoInst: docompar[] = [];
showModal = false;
constructor(
private dialog: MatDialog
) { }
ngOnInit(): void {
}
GuardarParametro(){
const dialogRef = this.dialog.open(AddDocumentosComponent, {
data: { idConf: this.idConf } // Puedes pasar datos al componente modal si es necesario
});
dialogRef.afterClosed().subscribe(result => {
// Puedes realizar acciones después de que la ventana modal se cierra si lo deseas
});
}
descargar(){
}
eliminarPDF(){
}
}
...@@ -33,7 +33,8 @@ ...@@ -33,7 +33,8 @@
<!--valor del indicador--> <!--valor del indicador-->
<mat-form-field class="form-field-dos"> <mat-form-field class="form-field-dos">
<mat-label>Valor Indicador</mat-label> <mat-label>Valor Indicador</mat-label>
<input matInput formControlName="valorindicadorFin"> <input matInput formControlName="valorindicadorFin" type="number" max="100">
<mat-error>El valor no puede ser mayor que 100</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
...@@ -95,7 +96,8 @@ ...@@ -95,7 +96,8 @@
<!--valor del indicador--> <!--valor del indicador-->
<mat-form-field class="form-field-dos"> <mat-form-field class="form-field-dos">
<mat-label>Valor Indicador:</mat-label> <mat-label>Valor Indicador:</mat-label>
<input matInput formControlName="valorindicadorObjG"> <input matInput formControlName="valorindicadorObjG" type="number" max="100">
<mat-error>El valor no puede ser mayor que 100</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
...@@ -157,7 +159,8 @@ ...@@ -157,7 +159,8 @@
<!--valor del indicador--> <!--valor del indicador-->
<mat-form-field class="form-field-dos"> <mat-form-field class="form-field-dos">
<mat-label>Valor Indicador:</mat-label> <mat-label>Valor Indicador:</mat-label>
<input matInput formControlName="valorindicadorObjEspe"> <input matInput formControlName="valorindicadorObjEspe" type="number" max="100">
<mat-error>El valor no puede ser mayor que 100</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
...@@ -220,6 +223,8 @@ ...@@ -220,6 +223,8 @@
<mat-form-field class="form-field-dos"> <mat-form-field class="form-field-dos">
<mat-label>Valor Indicador:</mat-label> <mat-label>Valor Indicador:</mat-label>
<input matInput formControlName="valorindicadorActi"> <input matInput formControlName="valorindicadorActi">
<input matInput formControlName="valorindicadorActi" type="number" max="100">
<mat-error>El valor no puede ser mayor que 100</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
...@@ -335,6 +340,7 @@ ...@@ -335,6 +340,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="Column1"></th>
<th class="Column1 negrita">Nro</th> <th class="Column1 negrita">Nro</th>
<th class="Column1 negrita">Descripción</th> <th class="Column1 negrita">Descripción</th>
<th class="Column1 negrita">Tipo Indicador</th> <th class="Column1 negrita">Tipo Indicador</th>
...@@ -348,6 +354,12 @@ ...@@ -348,6 +354,12 @@
<tbody> <tbody>
<ng-container *ngFor="let item of objetivoProEsp; let i = index"> <ng-container *ngFor="let item of objetivoProEsp; let i = index">
<tr id="fila-{{i}}"> <tr id="fila-{{i}}">
<td>
<button (click)="toggleDiv(i)">
<mat-icon>{{ mostrarDiv[i] ? 'keyboard_arrow_down' :
'keyboard_arrow_right' }}</mat-icon>
</button>
</td>
<td> <td>
{{i+1}} {{i+1}}
</td> </td>
...@@ -366,11 +378,11 @@ ...@@ -366,11 +378,11 @@
</tr> </tr>
<!-- tabla interna para cada item --> <!-- tabla interna para cada item -->
<tr> <tr *ngIf="mostrarDiv[i]">
<td colspan="8"> <td colspan="8">
<div class="container"> <div class="container">
<div class="mat-elevation-z8"> <div class="">
<div class="div-container"> <div>
<label class="label-negrita">Actividades: </label> <label class="label-negrita">Actividades: </label>
<button (click)="AddActi(item.uzytavobjetivo_programa_id)"> <button (click)="AddActi(item.uzytavobjetivo_programa_id)">
<mat-icon color="primary">add_circle</mat-icon> <mat-icon color="primary">add_circle</mat-icon>
......
import { Component, OnInit,ElementRef, ViewChild } from '@angular/core'; import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms'; import { FormBuilder, FormGroup } from '@angular/forms';
import { objetivoprograma } from 'src/app/modules/main/Models/objetivoPrograma'; import { objetivoprograma } from 'src/app/modules/main/Models/objetivoPrograma';
import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service'; import { Actualiza_datosService } from 'src/app/modules/main/services/actualiza_datos/actualiza_datos.service';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service'; import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { Objetivo_programaService } from 'src/app/modules/main/services/objetivo_programa/objetivo_programa.service'; import { Objetivo_programaService } from 'src/app/modules/main/services/objetivo_programa/objetivo_programa.service';
import { MatTreeNestedDataSource } from '@angular/material/tree';
import { NestedTreeControl } from '@angular/cdk/tree'
@Component({ @Component({
selector: 'app-add-matriz-logico', selector: 'app-add-matriz-logico',
templateUrl: './add-matriz-logico.component.html', templateUrl: './add-matriz-logico.component.html',
...@@ -43,6 +44,13 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -43,6 +44,13 @@ export class AddMatrizLogicoComponent implements OnInit {
objetivoProObj: objetivoprograma[] = []; //esto recupera el arreglo para los objetivos generales objetivoProObj: objetivoprograma[] = []; //esto recupera el arreglo para los objetivos generales
objetivoProEsp: objetivoprograma[] = []; // esto recupera el arreglo para los objetivos especificos objetivoProEsp: objetivoprograma[] = []; // esto recupera el arreglo para los objetivos especificos
objetivoProAct: objetivoprograma[] = []; // esto recupera el arreglo para los actividades de cada objetivo objetivoProAct: objetivoprograma[] = []; // esto recupera el arreglo para los actividades de cada objetivo
//mostrar la tabla interna
mostrarDiv: boolean[] = [];
toggleDiv(i: number) {
this.mostrarDiv[i] = !this.mostrarDiv[i];
}
constructor( constructor(
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private objeProS: Objetivo_programaService, private objeProS: Objetivo_programaService,
...@@ -52,7 +60,7 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -52,7 +60,7 @@ export class AddMatrizLogicoComponent implements OnInit {
) { } ) { }
ngOnInit(): void { ngOnInit(): void {
this.idRecuperado = parseInt(localStorage.getItem('proyectoId'),10); this.idRecuperado = parseInt(localStorage.getItem('proyectoId'), 10);
this.myForm = this.formBuilder.group({ this.myForm = this.formBuilder.group({
fin: [], fin: [],
tipoindiFin: [], tipoindiFin: [],
...@@ -89,10 +97,10 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -89,10 +97,10 @@ export class AddMatrizLogicoComponent implements OnInit {
supuestoActi: [] supuestoActi: []
}); });
this.datosCompartidos.datos$.subscribe( () => { this.datosCompartidos.datos$.subscribe(() => {
this.obtenerRegistros(); this.obtenerRegistros();
}); });
this.objeProS.parametrosActualizados.subscribe(()=>{ this.objeProS.parametrosActualizados.subscribe(() => {
this.obtenerRegistros(); this.obtenerRegistros();
}); });
...@@ -172,7 +180,7 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -172,7 +180,7 @@ export class AddMatrizLogicoComponent implements OnInit {
this.cambio2 = false; this.cambio2 = false;
//para recuperar el id //para recuperar el id
this.idObjeGeneral = this.objeProS.obtenerIdPro(); this.idObjeGeneral = this.objeProS.obtenerIdPro();
localStorage.setItem('proyectoId',this.idObjeGeneral.toString()); localStorage.setItem('proyectoId', this.idObjeGeneral.toString());
}); });
} catch (error) { } catch (error) {
console.error('Error al enviar los datos:', error); console.error('Error al enviar los datos:', error);
...@@ -254,7 +262,7 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -254,7 +262,7 @@ export class AddMatrizLogicoComponent implements OnInit {
this.objetivoPro = data.filter(item => item.uzytavproyec_id === this.idRecuperado && item.uzytavobjetivo_programatipo === 1); this.objetivoPro = data.filter(item => item.uzytavproyec_id === this.idRecuperado && item.uzytavobjetivo_programatipo === 1);
//secundario para listar el objetivo General //secundario para listar el objetivo General
this.objetivoProObj = data.filter(item => item.uzytavproyec_id === this.idRecuperado && item.uzytavobjetivo_programatipo === 2); this.objetivoProObj = data.filter(item => item.uzytavproyec_id === this.idRecuperado && item.uzytavobjetivo_programatipo === 2);
if(this.objetivoProObj.length > 0){ if (this.objetivoProObj.length > 0) {
this.idObjeGeneralRecu = this.objetivoProObj[0].uzytavobjetivo_programa_id; this.idObjeGeneralRecu = this.objetivoProObj[0].uzytavobjetivo_programa_id;
this.idCompartido.setIdPadreGuardado(this.idObjeGeneralRecu); this.idCompartido.setIdPadreGuardado(this.idObjeGeneralRecu);
} }
...@@ -290,7 +298,7 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -290,7 +298,7 @@ export class AddMatrizLogicoComponent implements OnInit {
this.scrollIntoView(); this.scrollIntoView();
} }
addOBJG(){ addOBJG() {
this.cambio2 = true; this.cambio2 = true;
this.myForm2.reset(); this.myForm2.reset();
this.scrollIntoView(); this.scrollIntoView();
...@@ -331,7 +339,7 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -331,7 +339,7 @@ export class AddMatrizLogicoComponent implements OnInit {
} }
} }
eliminarObjEsp(id: number){ eliminarObjEsp(id: number) {
const confirmacion = confirm('¿Desea eliminar el registro?'); const confirmacion = confirm('¿Desea eliminar el registro?');
if (confirmacion) { if (confirmacion) {
this.objeProS.eliminarParametros(id).subscribe( this.objeProS.eliminarParametros(id).subscribe(
...@@ -347,7 +355,7 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -347,7 +355,7 @@ export class AddMatrizLogicoComponent implements OnInit {
} }
} }
eliminarActividad(id: number){ eliminarActividad(id: number) {
const confirmacion = confirm('¿Desea eliminar el registro?'); const confirmacion = confirm('¿Desea eliminar el registro?');
if (confirmacion) { if (confirmacion) {
this.objeProS.eliminarParametros(id).subscribe( this.objeProS.eliminarParametros(id).subscribe(
...@@ -363,10 +371,10 @@ export class AddMatrizLogicoComponent implements OnInit { ...@@ -363,10 +371,10 @@ export class AddMatrizLogicoComponent implements OnInit {
} }
} }
especificarValor(tipo : number){ especificarValor(tipo: number) {
if(tipo === 1){ if (tipo === 1) {
return 'Valor'; return 'Valor';
}else { } else {
return 'Porcentaje'; return 'Porcentaje';
} }
} }
......
...@@ -319,14 +319,123 @@ ...@@ -319,14 +319,123 @@
<!--Stepper version dos--> <!--Stepper version dos-->
</mat-expansion-panel> </mat-expansion-panel>
<!--Seguimiento--> <!--Seguimiento-->
<!--Seguimiento-->
<mat-expansion-panel hideToggle>
<mat-expansion-panel-header>
<mat-panel-title>
<strong>Inicio Ejecución</strong>
</mat-panel-title>
</mat-expansion-panel-header>
<!--Acceso numero 1-->
<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 de Docentes
</mat-panel-title>
</mat-expansion-panel-header>
<!--fin-->
</mat-expansion-panel>
<!--acceso numero 2-->
<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>
2.- Asignación de Estudiantes
</mat-panel-title>
</mat-expansion-panel-header>
<!--fin-->
</mat-expansion-panel>
<!--acceso numero 3-->
<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>
3.- Compromiso de Participación
</mat-panel-title>
</mat-expansion-panel-header>
<!--fin-->
</mat-expansion-panel>
</mat-expansion-panel>
<!--Ejecución-->
<mat-expansion-panel hideToggle> <mat-expansion-panel hideToggle>
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
<strong>Seguimiento</strong> <strong>Ejecución</strong>
</mat-panel-title>
</mat-expansion-panel-header>
<!--ejecucuipon punto 1-->
<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.- Informes de avance
</mat-panel-title>
</mat-expansion-panel-header>
<!--fin-->
</mat-expansion-panel>
<!--ejecución punto dos-->
<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>
2.- Horas dedicación docente
</mat-panel-title>
</mat-expansion-panel-header>
<!--fin-->
</mat-expansion-panel>
<!--ejecución punto tres-->
<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>
3.- Horas dedicación estudiante
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<p>I'm visible because I am open</p>
<!--fin-->
</mat-expansion-panel>
<!--ejecución punto cuatro-->
<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>
4.- Finalizar proceso de ejecución
</mat-panel-title>
</mat-expansion-panel-header>
<!--fin-->
</mat-expansion-panel>
</mat-expansion-panel> </mat-expansion-panel>
<!--Cierre--> <!--Cierre-->
<mat-expansion-panel hideToggle> <mat-expansion-panel hideToggle>
<mat-expansion-panel-header> <mat-expansion-panel-header>
...@@ -334,17 +443,80 @@ ...@@ -334,17 +443,80 @@
<strong>Cierre</strong> <strong>Cierre</strong>
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<p>I'm visible because I am open</p>
<!--Resultados del proyecto-->
<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.- Numérico de Beneficiarios
</mat-panel-title>
</mat-expansion-panel-header>
<vex-resultados></vex-resultados>
<!--fin-->
</mat-expansion-panel> </mat-expansion-panel>
<!--Evaluación-->
<mat-expansion-panel hideToggle> <!--Resultados del proyecto-->
<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>
2.- Objetivos ejecutados
</mat-panel-title>
</mat-expansion-panel-header>
<vex-resultados></vex-resultados>
<!--fin-->
</mat-expansion-panel>
<!--Resultados del proyecto-->
<mat-expansion-panel (opened)="contraccion = true"
(closed)="contraccion = false">
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
<strong>Evaluación</strong> <mat-icon
[ngClass]="{'expanded': contraccion, 'collapsed': !contraccion}">keyboard_arrow_right</mat-icon>
3.- Presupuesto ejecutado
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<p>I'm visible because I am open</p> <vex-resultados></vex-resultados>
<!--fin-->
</mat-expansion-panel> </mat-expansion-panel>
<!--Resultados del proyecto-->
<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>
4.- Resultados Proyecto
</mat-panel-title>
</mat-expansion-panel-header>
<vex-resultados></vex-resultados>
<!--fin-->
</mat-expansion-panel>
<!--Resultados del proyecto-->
<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>
5..- Finalizar Proceso de Cierre
</mat-panel-title>
</mat-expansion-panel-header>
<vex-resultados></vex-resultados>
<!--fin-->
</mat-expansion-panel>
</mat-expansion-panel>
</mat-accordion> </mat-accordion>
</div> </div>
......
...@@ -374,19 +374,53 @@ ...@@ -374,19 +374,53 @@
<!--fin--> <!--fin-->
</mat-expansion-panel> </mat-expansion-panel>
<!--Proyectos Planificados--> <!--Acta de Consejo de Departamento-->
<mat-expansion-panel (opened)="contraccion = true" <mat-expansion-panel (opened)="contraccion = true"
(closed)="contraccion = false"> (closed)="contraccion = false">
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
<mat-icon <mat-icon
[ngClass]="{'expanded': contraccion, 'collapsed': !contraccion}">keyboard_arrow_right</mat-icon> [ngClass]="{'expanded': contraccion, 'collapsed': !contraccion}">keyboard_arrow_right</mat-icon>
Proyectos Planificados 8.- Acta de Consejo de Departamento
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<!--Datos generales internos--> <!--Datos generales internos-->
<app-acta-consejo-departamento></app-acta-consejo-departamento>
<app-listar-acta-consejo-departamento></app-listar-acta-consejo-departamento>
<!--fin-->
</mat-expansion-panel>
<!--Acta de Compromiso Director del Proyecto-->
<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>
9.- Acta de Compromiso Director del Proyecto
</mat-panel-title>
</mat-expansion-panel-header>
<!--Datos generales internos-->
<app-acta-director-proyecto></app-acta-director-proyecto>
<!--fin-->
</mat-expansion-panel>
<!--Acta de Compromiso de Carreras -->
<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>
10.- Acta de Compromiso de Carreras
</mat-panel-title>
</mat-expansion-panel-header>
<!--Datos generales internos-->
<app-acta-compromiso-carreras></app-acta-compromiso-carreras>
<app-listar-acta-compromiso-carreras></app-listar-acta-compromiso-carreras>
<!--fin--> <!--fin-->
</mat-expansion-panel> </mat-expansion-panel>
...@@ -404,6 +438,20 @@ ...@@ -404,6 +438,20 @@
<!--fin--> <!--fin-->
</mat-expansion-panel> </mat-expansion-panel>
<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>
Ver y descargar PDF.
</mat-panel-title>
</mat-expansion-panel-header>
<!-- <vex-pdf></vex-pdf> -->
<!--fin-->
</mat-expansion-panel>
<!--Stepper version dos--> <!--Stepper version dos-->
</mat-expansion-panel> </mat-expansion-panel>
<!--Seguimiento--> <!--Seguimiento-->
...@@ -453,6 +501,26 @@ ...@@ -453,6 +501,26 @@
3.- Compromiso de Participación 3.- Compromiso de Participación
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<button mat-raised-button color="primary"
(click)="mostrarCompro = true">Agregar</button>
<button mat-raised-button color="warn"
(click)="cancelarCompro()">Cancelar</button>
<vex-add-compromiso *ngIf="mostrarCompro"
(formularioGuardado)="cancelarCompro()"></vex-add-compromiso>
<vex-list-compromiso></vex-list-compromiso>
<!--fin-->
</mat-expansion-panel>
<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>
4.- Carta Compromiso Comunidad
</mat-panel-title>
</mat-expansion-panel-header>
<vex-carta-compromiso-comu></vex-carta-compromiso-comu>
<!--fin--> <!--fin-->
</mat-expansion-panel> </mat-expansion-panel>
...@@ -462,7 +530,7 @@ ...@@ -462,7 +530,7 @@
<mat-expansion-panel hideToggle> <mat-expansion-panel hideToggle>
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
<strong>Cierre</strong> <strong>Ejecución</strong>
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<!--ejecucuipon punto 1--> <!--ejecucuipon punto 1-->
...@@ -514,7 +582,7 @@ ...@@ -514,7 +582,7 @@
<mat-panel-title> <mat-panel-title>
<mat-icon <mat-icon
[ngClass]="{'expanded': contraccion, 'collapsed': !contraccion}">keyboard_arrow_right</mat-icon> [ngClass]="{'expanded': contraccion, 'collapsed': !contraccion}">keyboard_arrow_right</mat-icon>
3.- Finalizar proceso de ejecución 4.- Finalizar proceso de ejecución
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
...@@ -530,6 +598,49 @@ ...@@ -530,6 +598,49 @@
<strong>Cierre</strong> <strong>Cierre</strong>
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<!--Resultados del proyecto-->
<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.- Numérico de Beneficiarios
</mat-panel-title>
</mat-expansion-panel-header>
<vex-list-insti></vex-list-insti>
<!--fin-->
</mat-expansion-panel>
<!--Resultados del proyecto-->
<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>
2.- Objetivos ejecutados
</mat-panel-title>
</mat-expansion-panel-header>
<vex-list-objetivos-ejec></vex-list-objetivos-ejec>
<!--fin-->
</mat-expansion-panel>
<!--Resultados del proyecto-->
<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>
3.- Presupuesto ejecutado
</mat-panel-title>
</mat-expansion-panel-header>
<!--fin-->
</mat-expansion-panel>
<!--Resultados del proyecto--> <!--Resultados del proyecto-->
<mat-expansion-panel (opened)="contraccion = true" <mat-expansion-panel (opened)="contraccion = true"
(closed)="contraccion = false"> (closed)="contraccion = false">
...@@ -543,6 +654,20 @@ ...@@ -543,6 +654,20 @@
<vex-resultados></vex-resultados> <vex-resultados></vex-resultados>
<!--fin--> <!--fin-->
</mat-expansion-panel> </mat-expansion-panel>
<!--Resultados del proyecto-->
<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>
5..- Finalizar Proceso de Cierre
</mat-panel-title>
</mat-expansion-panel-header>
<!--fin-->
</mat-expansion-panel>
</mat-expansion-panel> </mat-expansion-panel>
</mat-accordion> </mat-accordion>
......
...@@ -16,6 +16,7 @@ export class EditProyectoComponent implements OnInit { ...@@ -16,6 +16,7 @@ export class EditProyectoComponent implements OnInit {
mostrarPCP:boolean = false; mostrarPCP:boolean = false;
mostrarLineas: boolean = false; mostrarLineas: boolean = false;
mostrarPresupuestoDetallado: boolean = false; mostrarPresupuestoDetallado: boolean = false;
mostrarCompro: boolean = false;
mostrarEstra: boolean = false; mostrarEstra: boolean = false;
idRecu: number; idRecu: number;
...@@ -34,6 +35,10 @@ export class EditProyectoComponent implements OnInit { ...@@ -34,6 +35,10 @@ export class EditProyectoComponent implements OnInit {
console.log('Valor de contraccion:', this.contraccion); console.log('Valor de contraccion:', this.contraccion);
} }
cancelarCompro(){
this.mostrarCompro = false;
}
volver(){ volver(){
localStorage.removeItem('proyectoId'); localStorage.removeItem('proyectoId');
this.router.navigate(['main/ListaProyectos']); this.router.navigate(['main/ListaProyectos']);
......
<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">
...@@ -16,18 +16,25 @@ ...@@ -16,18 +16,25 @@
<div> <div>
<label class="label-negrita"> Viabilidad Técnica:</label> <label class="label-negrita"> Viabilidad Técnica:</label>
<angular-editor formControlName="viabilidad" [config]="editorConfig"></angular-editor> <ckeditor formControlName="viabilidad" class="custom-ckeditor"
[disabled]="!isEditorEnabled" [style.height]="editorHeight"
[editor]="Editor"></ckeditor>
</div> </div>
<div class="editor-separator"></div> <div class="editor-separator"></div>
<div> <div>
<label class="label-negrita"> ¿Qué perdería el país si el proyecto no se ejecuta en este periodo?</label> <label class="label-negrita"> ¿Qué perdería el país si el proyecto no
<angular-editor formControlName="perderia" [config]="editorConfig"></angular-editor> se ejecuta en este periodo?</label>
<ckeditor formControlName="perderia" class="custom-ckeditor"
[disabled]="!isEditorEnabled" [style.height]="editorHeight"
[editor]="Editor"></ckeditor>
</div> </div>
<div class="editor-separator"></div> <div class="editor-separator"></div>
<div> <div>
<label class="label-negrita"> ¿Cuáles son los resultados o impactos esperados del proyecto?</label> <label class="label-negrita"> ¿Cuáles son los resultados o impactos
<angular-editor formControlName="resultadoO" [config]="editorConfig"></angular-editor> esperados del proyecto?</label>
<ckeditor formControlName="resultadoO" class="custom-ckeditor"
[disabled]="!isEditorEnabled" [style.height]="editorHeight"
[editor]="Editor"></ckeditor>
</div> </div>
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
......
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Form, FormBuilder, FormGroup, Validators } from '@angular/forms'; import { Form, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { AngularEditorConfig } from '@kolkov/angular-editor';
import { Proyectos } from 'src/app/modules/main/Models/proyectos'; import { Proyectos } from 'src/app/modules/main/Models/proyectos';
import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service'; import { Compartir_idService } from 'src/app/modules/main/services/compartir_id/compartir_id.service';
import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service'; import { MostrarOcultarService } from 'src/app/modules/main/services/mostrar-ocultar.service';
import { ProyectosService } from 'src/app/modules/main/services/proyectos/proyectos.service'; import { ProyectosService } from 'src/app/modules/main/services/proyectos/proyectos.service';
import ClassicEditor from '../../ckeditor-custom/build/ckeditor';
import { MatDialog } from '@angular/material/dialog';
import { EnvioFormularioComponent } from '../../../programa/opciones/envio-formulario/envio-formulario.component';
@Component({ @Component({
selector: 'vex-edit-viabilidad', selector: 'vex-edit-viabilidad',
templateUrl: './edit-viabilidad.component.html', templateUrl: './edit-viabilidad.component.html',
styleUrls: ['./edit-viabilidad.component.css'] styleUrls: ['./edit-viabilidad.component.css']
}) })
export class EditViabilidadComponent implements OnInit { export class EditViabilidadComponent implements OnInit {
public Editor = ClassicEditor;
idRecuperado: number; idRecuperado: number;
htmlContent: string = ''; htmlContent: string = '';
myForm: FormGroup; myForm: FormGroup;
cambio: boolean; cambio: boolean;
private proyectos: Proyectos = new Proyectos(); private proyectos: Proyectos = new Proyectos();
editorConfig: AngularEditorConfig = { editorHeight = '400px';
editable: false, formularioEnviado: boolean;
spellcheck: true, isEditorEnabled = false;
height: '10rem',
minHeight: '5rem',
translate: 'yes',
enableToolbar: true,
showToolbar: true,
placeholder: 'Enter text here...',
defaultParagraphSeparator: '',
defaultFontName: '',
defaultFontSize: '',
fonts: [
{ class: 'arial', name: 'Arial' },
{ class: 'times-new-roman', name: 'Times New Roman' },
{ class: 'calibri', name: 'Calibri' },
{ class: 'comic-sans-ms', name: 'Comic Sans MS' }
],
customClasses: [
{
name: 'quote',
class: 'quote',
},
{
name: 'redText',
class: 'redText'
},
{
name: 'titleText',
class: 'titleText',
tag: 'h1',
},
]
};
constructor( constructor(
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private proyectosService: ProyectosService, private proyectosService: ProyectosService,
private compartiId: Compartir_idService, private compartiId: Compartir_idService,
private mostrarOcultarService: MostrarOcultarService private mostrarOcultarService: MostrarOcultarService,
private dialog: MatDialog,
) { } ) { }
cambiar() { cambiar() {
this.cambio = true; this.cambio = true;
this.editorConfig.editable = true; this.isEditorEnabled = true;
} }
cancelado() { cancelado() {
this.cambio = false; this.cambio = false;
this.editorConfig.editable = false; this.isEditorEnabled = false;
} }
ngOnInit(): void { ngOnInit(): void {
...@@ -105,12 +77,23 @@ export class EditViabilidadComponent implements OnInit { ...@@ -105,12 +77,23 @@ export class EditViabilidadComponent implements OnInit {
this.proyectos.uzytavproyec_perderia = this.myForm.get('perderia').value; this.proyectos.uzytavproyec_perderia = this.myForm.get('perderia').value;
this.proyectos.uzytavproyec_resultados = this.myForm.get('resultadoO').value; this.proyectos.uzytavproyec_resultados = this.myForm.get('resultadoO').value;
this.proyectosService.modificarParametros(this.idRecuperado, this.proyectos).subscribe(response => { this.proyectosService.modificarParametros(this.idRecuperado, this.proyectos).subscribe(response => {
this.editorConfig.editable = false;
this.cambio = false; this.cambio = false;
this.openModal();
}); });
} catch (error) { } catch (error) {
console.error('Error al enviar los datos:', error); console.error('Error al enviar los datos:', error);
} }
} }
} }
openModal() {
const dialogRef = this.dialog.open(EnvioFormularioComponent, {
disableClose: true
});
dialogRef.afterClosed().subscribe(result => {
console.log('La ventana modal se ha cerrado');
this.formularioEnviado = true;
});
}
} }
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -72,6 +72,7 @@ export class CatalogoPartidasComponent implements OnInit { ...@@ -72,6 +72,7 @@ export class CatalogoPartidasComponent implements OnInit {
this.getGrupo(data).toLowerCase().includes(filter) || this.getGrupo(data).toLowerCase().includes(filter) ||
this.getSubgrupo1(data).toLowerCase().includes(filter) || this.getSubgrupo1(data).toLowerCase().includes(filter) ||
this.getSubgrupo2(data).toLowerCase().includes(filter) || this.getSubgrupo2(data).toLowerCase().includes(filter) ||
this.getSubgrupo3(data).toLowerCase().includes(filter) ||
data.uzytclasificador_presup_nombre.toLowerCase().includes(filter); data.uzytclasificador_presup_nombre.toLowerCase().includes(filter);
this.dataSource.filter = this.filtroGeneral.toLowerCase(); this.dataSource.filter = this.filtroGeneral.toLowerCase();
......
<div class="modal-container">
<div class="modal-content">
<p>{{ mensaje }}</p>
<button mat-button class="confirm-button" (click)="cerrarModal(true)">
Confirmar
</button>
<button mat-button class="cancel" (click)="cerrarModal(false)">Cancelar</button>
</div>
</div>
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