From 4a1c5953619e2a3ddfc7a9952643dee1196bc900 Mon Sep 17 00:00:00 2001 From: ma7payne Date: Fri, 24 Nov 2023 09:19:14 -0300 Subject: [PATCH] feat(TYP): listado de prestaciones no nominalizadas --- .../no-nominalizadas.component.ts | 182 ++++++++++++++++ .../no-nominalizadas/no-nominalizadas.html | 195 ++++++++++++++++++ .../no-nominalizadas/no-nominalizadas.scss | 21 ++ .../turnos-prestaciones.component.ts | 3 - .../turnos-prestaciones.html | 2 +- .../turnos-prestaciones.module.ts | 5 +- .../prestaciones-select.directive.ts | 10 +- .../ejecucion/prestacionCrear.component.ts | 5 +- .../rup/components/huds/vistaPrestacion.ts | 12 +- 9 files changed, 420 insertions(+), 15 deletions(-) create mode 100644 src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.component.ts create mode 100644 src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.html create mode 100644 src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.scss diff --git a/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.component.ts b/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.component.ts new file mode 100644 index 0000000000..8ea449574c --- /dev/null +++ b/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.component.ts @@ -0,0 +1,182 @@ +import { Auth } from '@andes/auth'; +import { cache } from '@andes/shared'; +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { BehaviorSubject, Observable, Subject, takeUntil, tap } from 'rxjs'; +import { AdjuntosService } from 'src/app/modules/rup/services/adjuntos.service'; +import { ObraSocialService } from 'src/app/services/obraSocial.service'; +import { environment } from 'src/environments/environment'; +import { TurnosPrestacionesService } from '../services/turnos-prestaciones.service'; + +@Component({ + selector: 'no-nominalizadas', + templateUrl: 'no-nominalizadas.html', + styleUrls: ['./no-nominalizadas.scss'] +}) + +export class NoNominalizadasComponent implements OnInit, OnDestroy { + private fileToken; + + public showPrestacion; + public fechaDesde; + public fechaHasta; + public datoPaciente; + public prestaciones; + public botonBuscarDisabled; + public parametros; + public loader; + public prestacionIniciada; + public pacientes; + public prestacion; + public seleccionada; + public tipoActividad; + public busqueda$: Observable; + public accion$ = new Subject(); + public onDestroy$ = new Subject(); + public lastSelect$ = new BehaviorSubject(null); + + public columnas = { + fecha: true, + efector: true, + tipoPrestacion: true, + actividad: true, + equipoSalud: true, + fechaRegistro: true, + }; + + constructor( + private auth: Auth, + private turnosPrestacionesService: TurnosPrestacionesService, + private adjuntosService: AdjuntosService, + private obraSocialService: ObraSocialService + ) { } + + ngOnDestroy() { + this.onDestroy$.next(null); + this.onDestroy$.complete(); + } + + ngOnInit() { + this.fechaDesde = moment().startOf('day').toDate(); + this.fechaHasta = moment().endOf('day').toDate(); + + this.parametros = { + fechaDesde: this.fechaDesde, + fechaHasta: this.fechaHasta, + organizacion: this.auth.organizacion.id, + idPrestacion: '', + idProfesional: '', + financiadores: [], + estado: '', + estadoFacturacion: '', + noNominalizada: true + }; + + this.showPrestacion = false; + + this.busqueda$ = this.turnosPrestacionesService.prestacionesOrdenada$.pipe( + tap(() => { + this.loader = false; + }), + takeUntil(this.onDestroy$), + cache() + ); + + this.turnosPrestacionesService.loading$.pipe( + takeUntil(this.onDestroy$) + ).subscribe((loading) => { + this.loader = loading; // Actualizar el estado del loader + }); + + this.adjuntosService.token$.subscribe((data: any) => { + this.fileToken = data.token; + }); + } + + refreshSelection(tipo) { + const fechaDesde = this.fechaDesde ? moment(this.fechaDesde).startOf('day') : null; + const fechaHasta = this.fechaHasta ? moment(this.fechaHasta).endOf('day') : null; + + if (this.fechaDesde && this.fechaHasta) { + const diff = moment(this.fechaHasta).diff(moment(this.fechaDesde), 'days'); + this.botonBuscarDisabled = diff > 31; + } + + if (fechaDesde && fechaDesde.isValid() && fechaHasta && fechaHasta.isValid()) { + if (tipo === 'fechaDesde') { + if (fechaDesde.isValid()) { + this.parametros['fechaDesde'] = fechaDesde.isValid() ? fechaDesde.toDate() : moment().format(); + this.parametros['organizacion'] = this.auth.organizacion.id; + } + } + if (tipo === 'fechaHasta') { + if (fechaHasta.isValid()) { + this.parametros['fechaHasta'] = fechaHasta.isValid() ? fechaHasta.toDate() : moment().format(); + this.parametros['organizacion'] = this.auth.organizacion.id; + } + } + if (tipo === 'paciente') { + this.parametros['paciente'] = this.datoPaciente ? this.datoPaciente : ''; + } + if (tipo === 'prestaciones') { + this.parametros['prestacion'] = this.prestaciones ? this.prestaciones.conceptId : ''; + } + if (tipo === 'descargar') { + this.turnosPrestacionesService.descargar(this.parametros, 'turnos-y-prestaciones').subscribe(); + } + if (tipo === 'filter') { + this.buscar(this.parametros); + } + } + } + + buscar(parametros) { + this.turnosPrestacionesService.buscar(parametros); + this.showPrestacion = false; + } + + mostrarPrestacion(datos) { + this.prestacionIniciada = datos.idPrestacion; + this.showPrestacion = true; + + const aux: any = this.lastSelect$; + if (aux._value) { + aux._value.seleccionada = false; + } + this.lastSelect$.next(datos); + datos.seleccionada = true; + + this.prestacion = datos; + this.pacientes = datos.pacientes; + this.tipoActividad = datos.tipoActividad + '/' + datos.tematica; + } + + onClose() { + this.showPrestacion = false; + const aux: any = this.lastSelect$; + if (aux._value) { + aux._value.seleccionada = false; + } + } + + getObraSocial(paciente) { + if (paciente.documento) { + this.obraSocialService.getObrasSociales(paciente.documento).subscribe(resultado => { + if (resultado.length) { + const obraSocialPaciente = resultado.map((os: any) => ({ + 'id': os.financiador, + 'label': os.financiador + })); + + return obraSocialPaciente[0].label; + } + }); + } + } + + public getAdjunto(documento) { + if (documento.id) { + const apiUri = environment.API + '/modules/rup/store/' + documento.id + '?token=' + this.fileToken; + window.open(apiUri); + } + } +} diff --git a/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.html b/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.html new file mode 100644 index 0000000000..834c8dd0a6 --- /dev/null +++ b/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.html @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + El rango de fecha no pueda superar los 31 días + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FechaEfectorTipo de PrestaciónActividad + Profesional/es
{{busqueda.fecha | date: "dd/MM/yyyy HH:mm " }} + {{busqueda.organizacion.nombre}} + {{busqueda.prestacion?.term}}{{busqueda.actividad}}{{busqueda.tematica && ' / ' + + busqueda.tematica}} + + Profesional no asignado + + +
+ {{ busqueda.profesionales | enumerar:['apellido','nombre'] }} +
+
+
+
+ + +
+
+
+
+
+ + + + + + +
+ La prestación no ha sido iniciada +
+
+
+
+
+ {{prestacion.prestacion?.term}} +
+
+
+
+ {{prestacion.actividad}}{{prestacion.tematica && ' / ' + + prestacion.tematica}} +
+
+
+
+
+
+ +
{{profesional | + nombre}} +
+
+
+
+
+
+
+ + {{ prestacion.fecha | fecha }} +
+
+
+
+ + {{ prestacion.estado }} +
+
+
+
+
+
+ + + {{prestacion?.estadoActual.createdAt.fecha | fecha }} + {{prestacion?.estadoActual.createdAt.fecha | hora }} + + +
+
+
+
+ + {{prestacion?.estadoActual.createdBy.nombreCompleto}} + + +
+
+
+
+
+ +
+ +
+ +
+ + + + + + + + + +
{{paciente.nombreCompleto}}{{paciente.edadReal.valor}} {{paciente.edadReal.unidad}}{{paciente.documento || paciente.numeroIdentificacion}}
+
+ +
+ + + + + + + + +
{{documento.descripcion.term}} + + +
+
+
+
\ No newline at end of file diff --git a/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.scss b/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.scss new file mode 100644 index 0000000000..b4b87d3815 --- /dev/null +++ b/src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.scss @@ -0,0 +1,21 @@ +table th.sortable:hover { + text-decoration: underline !important; + cursor: pointer; +} + +cdk-virtual-scroll-viewport { + height: calc(100% - 180px); + table { + table-layout: fixed; + width: 100%; + + tbody tr td { + width: 100%; + } + .selected{ + width: 4% !important; + } + + } + +} \ No newline at end of file diff --git a/src/app/components/buscadorTurnosPrestaciones/turnos-prestaciones.component.ts b/src/app/components/buscadorTurnosPrestaciones/turnos-prestaciones.component.ts index 6b02b59b58..25df5e414e 100644 --- a/src/app/components/buscadorTurnosPrestaciones/turnos-prestaciones.component.ts +++ b/src/app/components/buscadorTurnosPrestaciones/turnos-prestaciones.component.ts @@ -310,9 +310,6 @@ export class TurnosPrestacionesComponent implements OnInit, OnDestroy { if (tipo === 'filter') { this.buscar(this.parametros); } - if (tipo === 'descargar') { - this.turnosPrestacionesService.descargar(this.parametros, 'turnos-y-prestaciones').subscribe(); - } } } diff --git a/src/app/components/buscadorTurnosPrestaciones/turnos-prestaciones.html b/src/app/components/buscadorTurnosPrestaciones/turnos-prestaciones.html index 513ff87e55..924c71e49e 100644 --- a/src/app/components/buscadorTurnosPrestaciones/turnos-prestaciones.html +++ b/src/app/components/buscadorTurnosPrestaciones/turnos-prestaciones.html @@ -19,7 +19,7 @@ placeholder="Ingrese un documento, apellido, nombre, alias o número de identificación"> + label="Prestación" tmPrestaciones preload="true" tipo="nominalizadas"> { - this.plexSelect.data = result; + const filtro = + tipo ? result.filter(concepto => + tipo === 'noNominalizadas' ? concepto.noNominalizada : !concepto.noNominalizada) : result; + + this.plexSelect.data = filtro; }); } else { this.subscription = this.plexSelect.getData.subscribe(($event) => { @@ -47,6 +54,7 @@ export class SelectPrestacionesDirective implements OnInit, OnDestroy { this.lastCallSubscription.unsubscribe(); } this.lastCallSubscription = this.conceptosTurneables.search({ permisos, ambito, term: `^${inputText}` }).subscribe(result => { + $event.callback(result); }); diff --git a/src/app/modules/rup/components/ejecucion/prestacionCrear.component.ts b/src/app/modules/rup/components/ejecucion/prestacionCrear.component.ts index fc5632d59b..8250f760c9 100644 --- a/src/app/modules/rup/components/ejecucion/prestacionCrear.component.ts +++ b/src/app/modules/rup/components/ejecucion/prestacionCrear.component.ts @@ -115,12 +115,9 @@ export class PrestacionCrearComponent implements OnInit { obraSocialPaciente = financiador; }); if (this.tipoPrestacionSeleccionada) { - if (!this.tipoPrestacionSeleccionada.noNominalizada) { - this.existePaciente(); - } const conceptoSnomed = this.tipoPrestacionSeleccionada; const nuevaPrestacion = { - paciente: { + paciente: this.paciente && { id: this.paciente.id, nombre: this.paciente.nombre, alias: this.paciente.alias, diff --git a/src/app/modules/rup/components/huds/vistaPrestacion.ts b/src/app/modules/rup/components/huds/vistaPrestacion.ts index 5ade81a164..ebe53e715b 100644 --- a/src/app/modules/rup/components/huds/vistaPrestacion.ts +++ b/src/app/modules/rup/components/huds/vistaPrestacion.ts @@ -59,11 +59,13 @@ export class VistaPrestacionComponent implements OnInit { map(prestacion => populateRelaciones(prestacion)) ).subscribe(prestacion => { this.hasPacs = prestacion.metadata?.findIndex(item => item.key === 'pacs-uid') >= 0; - this.servicioPaciente.getById(prestacion.paciente.id).subscribe(paciente => { - this.prestacion = prestacion; - this.paciente = paciente; - this._puedeEditar = this.puedeEditar && this.checkUser(); - }); + if (prestacion.paciente?.id) { + this.servicioPaciente.getById(prestacion.paciente.id).subscribe(paciente => { + this.prestacion = prestacion; + this.paciente = paciente; + this._puedeEditar = this.puedeEditar && this.checkUser(); + }); + } }); }