list-proyecto-asigna.component.ts 5.29 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
import { Component, OnInit, Input } from '@angular/core';
import { Router } from '@angular/router';
import { ViewChild } from '@angular/core';
import { MatPaginator } from '@angular/material/paginator';
import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { Proyectos } from '../../../Models/proyectos';
import { ProyectosService } from '../../../services/proyectos/proyectos.service';
import { MostrarOcultarService } from '../../../services/mostrar-ocultar.service';
import { Compartir_idService } from '../../../services/compartir_id/compartir_id.service';
import { Usuario } from '../../../Models/usuario';
import { UsuariosService } from '../../../services/usuarios/usuarios.service';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { DatosEspeService } from '../../../services/APIs Externas/Datos espe/datos-espe.service';


@Component({
  selector: 'vex-list-proyecto-asigna',
  templateUrl: './list-proyecto-asigna.component.html',
  styleUrls: ['./list-proyecto-asigna.component.css']
})
export class ListProyectoAsignaComponent implements OnInit {
  usuario!: Usuario[];
25
  selectedTipo: string;
26 27 28 29 30 31
  proyecto: Proyectos;
  proyectos!: Proyectos[];
  enviarIdUsuario: Proyectos;
  director: string;
  displayedColumns: string[] = [
    'Nro',
32
    'Estado',
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
    'Codigo',
    'Nombre',
    'Director',
    'Campus',
    'Departamento',
    'Tipo',
    'Seleccione'
  ];
  dataSource: MatTableDataSource<Proyectos>;

  @ViewChild(MatPaginator) paginator: MatPaginator;
  @ViewChild(MatSort) sort: MatSort;

  filtroGeneral: string = '';

  constructor(
    private router: Router,
    private proyectosService: ProyectosService,
    private datosUsuarioService: UsuariosService,
    private mostrarOcultarService: MostrarOcultarService,
    private compartirID: Compartir_idService,
    private datosEspeService: DatosEspeService
  ) {
    this.proyecto = new Proyectos();
    this.dataSource = new MatTableDataSource<Proyectos>([]);
    this.enviarIdUsuario = new Proyectos()
59
  }
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

  ngOnInit(): void {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
    this.obtenerRegistros();
  }

  ngAfterViewInit() {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
  }

  obtenerRegistros() {
    this.proyectosService.obtenerParametros().subscribe(data => {
      this.proyectos = data.map(proyecto => {
        return {
          ...proyecto,
          departamento$: this.obtenerDatosDepartamento(proyecto.stvsubj_code),
          campus$: this.obtenerDatosCampus(proyecto.stvcamp_code),
79
          nombres$: this.obtenerDatosUsuario(proyecto.uzytusuario_id),
80 81
        };
      });
82
      this.dataSource.data = this.proyectos;
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
    });
  }

  obtenerDatosCampus(codigo: string): Observable<string> {
    return this.datosEspeService.obtenerCampus().pipe(
      map(campus => {
        const campusEncontrado = campus.find(c => c.codigo === codigo);
        return campusEncontrado ? campusEncontrado.descripcion : 'No encontrado';
      })
    );
  }

  obtenerDatosDepartamento(codigo: string): Observable<string> {
    return this.datosEspeService.obtenerDepartamentos().pipe(
      map(departamentos => {
        const departamentoEncontrado = departamentos.find(c => c.subj === codigo);
        return departamentoEncontrado ? departamentoEncontrado.descripcion : 'No encontrado';
      })
    );
  }

  obtenerDatosUsuario(id: number): Observable<string> {
    return this.datosUsuarioService.getAll().pipe(
      map(data => {
        const usuarioEncontrado = data.find(c => c.uzytusuario_id === id);
        return usuarioEncontrado ? usuarioEncontrado.uzytusuario_telefono_celular + " - "
109 110
          + usuarioEncontrado.uzytusuario_nombres + " " +
          usuarioEncontrado.uzytusuario_apellidos : 'No encontrado';
111 112 113 114 115 116 117 118
      })
    );
  }

  editar(id: number) {
    const registroSeleccionado = this.proyectos.find(
      proyectoFind => proyectoFind.uzytavproyec_id === id
    );
119
    localStorage.setItem('proyectoId', id.toString());
120
    //this.compartirID.setIdGuardad(id);
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
    this.mostrarOcultarService.editProyecto = registroSeleccionado;
    this.router.navigate(['main/AsinarC-proyecto/', id],
      { queryParams: { idUsuarioTipo: "1" } }
    );
  }

  applyFilter(event: Event) {
    const filterValue = (event.target as HTMLInputElement).value;
    this.dataSource.filter = filterValue.trim();
    this.filtroGeneral = filterValue.trim();

    this.dataSource.filterPredicate = (data: Proyectos) => {
      const Codigo = data.uzytavproyec_codigo ? data.uzytavproyec_codigo.toLowerCase() : '';
      const Nombre = data.uzytavproyec_nombre ? data.uzytavproyec_nombre.toLowerCase() : '';


      // Filtrar por todos los campos (nombre de institución, dirección, representante y parroquia)
      return (
        Codigo.includes(this.filtroGeneral.toLowerCase()) ||
        Nombre.includes(this.filtroGeneral.toLowerCase())
      );
    };
  }
144 145 146 147 148 149 150 151 152 153 154 155

  applyFilterByEstado() {
    this.dataSource.filterPredicate = (data: Proyectos) => {
      if (this.selectedTipo === 'A') {
        return (data.uzytavcabcomca_id === null && data.uzytavconparaeva_id === null);
      } else if (this.selectedTipo === 'I') {
        return !(data.uzytavcabcomca_id === null && data.uzytavconparaeva_id === null);
      }
      return true;
    };
  }

156
}