diff --git a/src/app/components/turnos/dashboard/demandaInsatisfecha.html b/src/app/components/turnos/dashboard/demandaInsatisfecha.html index f47ca1cdcf..b381f2e3d0 100644 --- a/src/app/components/turnos/dashboard/demandaInsatisfecha.html +++ b/src/app/components/turnos/dashboard/demandaInsatisfecha.html @@ -14,4 +14,62 @@ - \ No newline at end of file + + + + + ¡Demanda insatisfecha guardada + exitosamente! +
+ +
+ + ACEPTAR + +
+ + + + Información +
+ +
+ + ACEPTAR + +
\ No newline at end of file diff --git a/src/app/components/turnos/dashboard/demandaInsatisfecha.scss b/src/app/components/turnos/dashboard/demandaInsatisfecha.scss new file mode 100644 index 0000000000..c00e9b1be4 --- /dev/null +++ b/src/app/components/turnos/dashboard/demandaInsatisfecha.scss @@ -0,0 +1,16 @@ +main { + min-height: auto !important; +} + +.modal-contents { + .content-row:last-child { + border-bottom: none; + } +} + +.content-row { + display: flex; + align-items: center; + margin-bottom: 10px; + border-bottom: 1px solid #999; +} \ No newline at end of file diff --git a/src/app/components/turnos/dashboard/demandaInsatisfecha.ts b/src/app/components/turnos/dashboard/demandaInsatisfecha.ts index 4e0f1d9bf1..08224a70d8 100644 --- a/src/app/components/turnos/dashboard/demandaInsatisfecha.ts +++ b/src/app/components/turnos/dashboard/demandaInsatisfecha.ts @@ -1,7 +1,11 @@ import { Auth } from '@andes/auth'; import { Plex } from '@andes/plex'; -import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { PlexModalComponent } from '@andes/plex/src/lib/modal/modal.component'; +import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; +import { forkJoin } from 'rxjs'; +import { of } from 'rxjs/internal/observable/of'; import { IPaciente } from 'src/app/core/mpi/interfaces/IPaciente'; +import { PrestacionesService } from 'src/app/modules/rup/services/prestaciones.service'; import { ConceptosTurneablesService } from 'src/app/services/conceptos-turneables.service'; import { ListaEsperaService } from 'src/app/services/turnos/listaEspera.service'; import { ProfesionalService } from './../../../services/profesional.service'; @@ -9,6 +13,7 @@ import { ProfesionalService } from './../../../services/profesional.service'; @Component({ selector: 'demandaInsatisfecha', templateUrl: 'demandaInsatisfecha.html', + styleUrls: ['demandaInsatisfecha.scss'] }) export class demandaInsatisfechaComponent { @@ -17,6 +22,8 @@ export class demandaInsatisfechaComponent { @Input() origen = 'citas'; @Input() estado = 'pendiente'; @Output() demandaCerrada = new EventEmitter(); + @ViewChild('modalSolicitudes', { static: true }) modalSolicitudes: PlexModalComponent; + @ViewChild('modalTurno', { static: true }) modalTurno: PlexModalComponent; tipoPrestacion: any; permisos = []; @@ -28,6 +35,8 @@ export class demandaInsatisfechaComponent { ]; motivo: any; organizacion = this.auth.organizacion; + solicitudesAsociadas; + turnoAsociado; constructor( public auth: Auth, @@ -35,6 +44,7 @@ export class demandaInsatisfechaComponent { public conceptosTurneablesService: ConceptosTurneablesService, public profesionalService: ProfesionalService, public listaEsperaService: ListaEsperaService, + public servicioPrestacion: PrestacionesService, ) { } loadTipoPrestaciones(event) { @@ -53,18 +63,53 @@ export class demandaInsatisfechaComponent { guardar() { if (this.motivo && this.tipoPrestacion) { - this.listaEsperaService.save({ id: this.paciente.id }, this.tipoPrestacion, this.estado, this.profesional, this.organizacion, this.motivo.nombre, this.origen).subscribe({ - complete: () => { - this.plex.toast('success', 'Demanda insatisfecha guardada exitosamente!'); - this.cerrar(); + const params = { + idPaciente: this.paciente.id, + prestacionDestino: this.tipoPrestacion?.conceptId, + estados: [ + 'auditoria', + 'pendiente', + ] + }; + + const servicioPrestacion$ = this.servicioPrestacion.getSolicitudes(params); + const listaEsperaService$ = this.listaEsperaService.save({ id: this.paciente.id }, this.tipoPrestacion, this.estado, this.profesional, this.organizacion, this.motivo.nombre, this.origen); + + forkJoin([ + servicioPrestacion$, + listaEsperaService$ + ]).subscribe({ + next: (resultado) => { + if (resultado[0].length) { + this.solicitudesAsociadas = resultado[0]; + this.modalSolicitudes.show(); + } else { + this.plex.toast('success', 'Demanda insatisfecha guardada exitosamente!'); + this.cerrar(); + } }, - error: (e) => this.plex.toast('danger', e.message, 'Ha ocurrido un error al guardar') + error: (err) => { + if (err.code === 'turno_existente') { + const { data } = err; + + const dia = moment(data.horaInicio).format('LL'); + const horario = moment(data.horaInicio).format('HH:mm'); + const profesionales = data.profesionales?.map(prof => ` ${prof.nombre} ${prof.apellido}`); + + this.turnoAsociado = { dia, horario, profesionales }; + this.modalTurno.show(); + } else { + this.plex.info('danger', err, 'No se pudo conectar con el servidor'); + } + + return of(null); + } }); } } cerrar() { this.demandaCerrada.emit(); + this.modalSolicitudes.close(); } - } diff --git a/src/app/services/turnos/listaEspera.service.ts b/src/app/services/turnos/listaEspera.service.ts index 3bad17834e..4ac8e24058 100644 --- a/src/app/services/turnos/listaEspera.service.ts +++ b/src/app/services/turnos/listaEspera.service.ts @@ -23,7 +23,7 @@ export class ListaEsperaService { } post(listaEspera: IListaEspera): Observable { - return this.server.post(this.listaEsperaUrl, listaEspera); + return this.server.post(this.listaEsperaUrl, listaEspera, { showError: false }); } postXIdAgenda(id: String, cambios: any): Observable {