diff --git a/src/app/app.module.ts b/src/app/app.module.ts index d64f0fe2..cb0f6f16 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -18,6 +18,7 @@ import { ScrollComponent } from './components/base/plex-scroll.component'; // Servicios import { AgendaService } from './services/agenda.service'; +import { ValidacionService } from './services/validacion.service'; import { CambioDniService } from './services/cambioDni.service'; import { PaisService } from './services/pais.service'; import { ProvinciaService } from './services/provincia.service'; @@ -210,7 +211,8 @@ import { FiltrosRenovacionComponent } from './components/profesionales/filtros-r ListadoTurnosPdfComponent, ZonaSanitariaService, DriveService, - PdfService + PdfService, + ValidacionService ], bootstrap: [AppComponent] }) diff --git a/src/app/components/profesionales/header-profesional.html b/src/app/components/profesionales/header-profesional.html index 0614704d..a871eb1d 100644 --- a/src/app/components/profesionales/header-profesional.html +++ b/src/app/components/profesionales/header-profesional.html @@ -14,6 +14,10 @@ No tiene supervisor + + {{profesional.validadoRenaper ? "VALIDADO":"NO VALIDADO"}} + +
editar Deshabilitar diff --git a/src/app/components/profesionales/listar-profesionales-detalle.html b/src/app/components/profesionales/listar-profesionales-detalle.html index 1b583176..bb148439 100644 --- a/src/app/components/profesionales/listar-profesionales-detalle.html +++ b/src/app/components/profesionales/listar-profesionales-detalle.html @@ -8,13 +8,15 @@ {{ profesional.profesionalMatriculado?'MATRICULADO':'NO MATRICULADO' }} + + {{profesional.validadoRenaper ? 'VALIDADO':'NO VALIDADO' }}
{{ profesional.apellido + ', '+ profesional.nombre}}
{{ profesional.documento }}
- + diff --git a/src/app/components/profesionales/profesional.component.ts b/src/app/components/profesionales/profesional.component.ts index 01aa1795..baa83638 100644 --- a/src/app/components/profesionales/profesional.component.ts +++ b/src/app/components/profesionales/profesional.component.ts @@ -17,8 +17,9 @@ import { Auth } from '@andes/auth'; import { ActivatedRoute, Router } from '@angular/router'; import { TurnoService } from '../../services/turno.service'; import { catchError, map, switchMap } from 'rxjs/operators'; -import { of, Observable } from 'rxjs'; +import { of, Observable, forkJoin } from 'rxjs'; import * as moment from 'moment'; +import { ValidacionService } from './../../services/validacion.service'; @Component({ selector: 'app-profesional', @@ -56,6 +57,7 @@ export class ProfesionalComponent implements OnInit { @Input() public profesional: IProfesional = { id: null, habilitado: true, + validadoRenaper: false, nombre: null, apellido: null, tipoDocumento: null, @@ -167,7 +169,8 @@ export class ProfesionalComponent implements OnInit { public auth: Auth, private router: Router, private route: ActivatedRoute, - private location: Location + private location: Location, + private validacionService: ValidacionService ) { } ngOnInit() { @@ -305,18 +308,33 @@ export class ProfesionalComponent implements OnInit { } return null; }), + switchMap(candidato => { + const profValid = this.validacionService.post({ documento: this.profesional.documento, sexo: this.profesional.sexo }); + return forkJoin([profValid, of(candidato)]); + }), switchMap(responseActualizar => { - if (responseActualizar !== null) { - // hubo match - if (responseActualizar) { - // actualizar candidato - return this._profesionalService.patchProfesional(this.profesional.id, this.profesional); + // Verificamos si esta validado por renaper. En caso de ser extranjero se registra sin problemas. + if (this.profesional.nacionalidad.nombre !== 'Argentina' || !responseActualizar[0].error || responseActualizar[0].menssage) { + // Si el profesional es extranjero entonces no puede ser validado por renaper. + if (this.profesional.nacionalidad.nombre === 'Argentina') { + this.profesional.validadoRenaper = true; + } + if (responseActualizar[1] !== null) { + // hubo match + if (responseActualizar[1]) { + // actualizar candidato + return this._profesionalService.patchProfesional(this.profesional.id, this.profesional); + } + this.profesional.id = undefined; } - this.profesional.id = undefined; - return of(null); // no actualiza + // no hubo match + this.profesional.validadoRenaper = true; + return this._profesionalService.saveProfesional({ profesional: this.profesional }); + } else { // No existe profesional con ese dni y sexo + this.plex.info('warning', 'Revise los datos ingresados.', 'Profesional no encontrado en renaper.'); + this.deshabilitarBoton = false; } - // no hubo match - return this._profesionalService.saveProfesional({ profesional: this.profesional }); + return of(null); }), switchMap(profesionalSaved => { if (!profesionalSaved) { @@ -482,13 +500,32 @@ export class ProfesionalComponent implements OnInit { elem.tipo = ((typeof elem.tipo === 'string') ? elem.tipo : (Object(elem.tipo).id)); return elem; }); - this._profesionalService.putProfesional(this.profesional) - .subscribe(resp => { + + this.validacionService.post({ + documento: this.profesional.documento, + sexo: this.profesional.sexo + }).pipe( + switchMap(resultado => { + if (resultado.error || resultado.message) { + this.plex.info('warning', 'Revise los datos ingresados', 'Profesional no encontrado'); + return of(null); + } else { + this.profesional.validadoRenaper = true; + return this._profesionalService.putProfesional(this.profesional); + } + }), + catchError(() => { + this.plex.info('danger', 'Error durante la validación'); + return of(null); + }) + ).subscribe(resp => { + if (resp) { this.profesional = resp; - this.plex.toast('success', 'Se modificó con éxito!', 'informacion', 1000); this.editado.emit(true); - }); - this.volverProfesional(); + this.plex.toast('success', 'Se modificó con éxito!', 'informacion', 1000); + this.volverProfesional(); + } + }); } else { this.plex.toast('danger', 'Falta completar los campos requeridos', 'informacion', 1000); } diff --git a/src/app/components/turnos/solicitar-turno-renovacion.component.ts b/src/app/components/turnos/solicitar-turno-renovacion.component.ts index e61f9be8..8f0634fc 100644 --- a/src/app/components/turnos/solicitar-turno-renovacion.component.ts +++ b/src/app/components/turnos/solicitar-turno-renovacion.component.ts @@ -38,6 +38,7 @@ export class SolicitarTurnoRenovacionComponent implements OnInit { @Input() public profesional: IProfesional = { id: null, habilitado: true, + validadoRenaper: false, nombre: null, apellido: null, tipoDocumento: null, diff --git a/src/app/interfaces/IProfesional.ts b/src/app/interfaces/IProfesional.ts index 397fb035..7ccd4691 100644 --- a/src/app/interfaces/IProfesional.ts +++ b/src/app/interfaces/IProfesional.ts @@ -5,6 +5,7 @@ import { export interface IProfesional { id: String; habilitado: Boolean; + validadoRenaper?: Boolean; nombre: String; apellido: String; tipoDocumento: String; diff --git a/src/app/services/validacion.service.ts b/src/app/services/validacion.service.ts new file mode 100644 index 00000000..3b935050 --- /dev/null +++ b/src/app/services/validacion.service.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@angular/core'; +import { Server } from '@andes/shared'; +import { Observable } from 'rxjs'; + + +@Injectable() +export class ValidacionService { + + private url = '/core-v2/mpi/validacion'; + constructor(private server: Server) { } + + post(params: any): Observable { + return this.server.post(this.url, params, { showError: false }); + } + +}