-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(TYP): listado de prestaciones no nominalizadas
- Loading branch information
Showing
9 changed files
with
420 additions
and
15 deletions.
There are no files selected for viewing
182 changes: 182 additions & 0 deletions
182
src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.component.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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<any[]>; | ||
public accion$ = new Subject<any>(); | ||
public onDestroy$ = new Subject<any>(); | ||
public lastSelect$ = new BehaviorSubject<string>(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); | ||
} | ||
} | ||
} |
195 changes: 195 additions & 0 deletions
195
src/app/components/buscadorTurnosPrestaciones/no-nominalizadas/no-nominalizadas.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
<plex-layout main="{{ showPrestacion? '7': '12'}}"> | ||
<plex-layout-main> | ||
<plex-title titulo="Prestaciones no nominalizadas"></plex-title> | ||
<!--Botones / Acciones--> | ||
<!--Filtros--> | ||
<plex-wrapper> | ||
<plex-datetime type="date" [(ngModel)]="fechaDesde" (change)="refreshSelection('fechaDesde')" | ||
name="fechaDesde" label="Desde" class="fechas" [max]="fechaHasta"> | ||
</plex-datetime> | ||
<plex-datetime type="date" [(ngModel)]="fechaHasta" (change)="refreshSelection('fechaHasta')" | ||
name="fechaHasta" label="Hasta" class="fechas" [min]="fechaDesde"> | ||
</plex-datetime> | ||
<plex-text [(ngModel)]="datoPaciente" (change)="refreshSelection('paciente')" label="Paciente" | ||
placeholder="Ingrese un documento, apellido, nombre, alias o número de identificación"> | ||
</plex-text> | ||
<plex-select [(ngModel)]="prestaciones" (change)="refreshSelection('prestaciones')" | ||
label="Prestación" tmPrestaciones preload="true" tipo="noNominalizadas"> | ||
</plex-select> | ||
<plex-button type="success" label="Buscar" (click)="refreshSelection('filter')" | ||
[disabled]='botonBuscarDisabled'> | ||
</plex-button> | ||
</plex-wrapper> | ||
<span class="text-danger" *ngIf='botonBuscarDisabled'> | ||
El rango de fecha no pueda superar los 31 días</span> | ||
|
||
<!-- Resultados --> | ||
<ng-container> | ||
<plex-title titulo="Listado" size="sm"> | ||
<plex-dropdown icon="format-list-checks" tooltip="Agregar columnas" tooltipPosition="left" type="info" | ||
size="sm" class="d-inline-block" [right]="true" class="ml-2"> | ||
<plex-grid cols="3"> | ||
<plex-bool label="Fecha" [(ngModel)]="columnas.fecha"> | ||
</plex-bool> | ||
<plex-bool label="Efector" [(ngModel)]="columnas.efector"> | ||
</plex-bool> | ||
<plex-bool label="Prestación" [(ngModel)]="columnas.tipoPrestacion"> | ||
</plex-bool> | ||
<plex-bool label="Equipo" [(ngModel)]="columnas.equipoSalud"> | ||
</plex-bool> | ||
<plex-bool label="Actividad" [(ngModel)]="columnas.actividad"> | ||
</plex-bool> | ||
</plex-grid> | ||
</plex-dropdown> | ||
</plex-title> | ||
<ng-container> | ||
<cdk-virtual-scroll-viewport [itemSize]="50"> | ||
<plex-loader *ngIf="loader" type="ball-pulse"></plex-loader> | ||
<table *ngIf="(busqueda$ | async)?.length && !loader" class="table table-striped table-sm"> | ||
<thead> | ||
<th *ngIf="columnas.fecha">Fecha</th> | ||
<th *ngIf="columnas.efector">Efector</th> | ||
<th *ngIf="columnas.tipoPrestacion">Tipo de Prestación</th> | ||
<th *ngIf="columnas.actividad">Actividad</th> | ||
<th *ngIf="columnas.equipoSalud"> | ||
Profesional/es</th> | ||
</thead> | ||
<tbody> | ||
<tr *ngFor="let busqueda of busqueda$ | async" class="hover" | ||
(click)="mostrarPrestacion(busqueda)" | ||
[ngClass]="{'bg-inverse text-white': busqueda.seleccionada}"> | ||
|
||
<td *ngIf="columnas.fecha">{{busqueda.fecha | date: "dd/MM/yyyy HH:mm " }}</td> | ||
<td *ngIf="columnas.efector"> | ||
{{busqueda.organizacion.nombre}} | ||
</td> | ||
<td *ngIf="columnas.tipoPrestacion">{{busqueda.prestacion?.term}}</td> | ||
<td *ngIf="columnas.actividad">{{busqueda.actividad}}{{busqueda.tematica && ' / ' + | ||
busqueda.tematica}}</td> | ||
<td *ngIf="columnas.equipoSalud" class="nombres-profesionales"> | ||
<span *ngIf="busqueda.profesionales?.length == 0" class="text-danger"> | ||
Profesional no asignado | ||
</span> | ||
<ng-container *ngIf="busqueda.profesionales"> | ||
<div *ngIf="busqueda.profesionales.length > 0"> | ||
{{ busqueda.profesionales | enumerar:['apellido','nombre'] }} | ||
</div> | ||
</ng-container> | ||
</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
<div *ngIf="!loader && !(busqueda$ | async)?.length " justify="center" class="mt-5"> | ||
<plex-label class="flex-column" icon="magnify" type="info" size="xl" direction="column" | ||
[titulo]="'No hay resultados'" | ||
subtitulo="Complete los filtros deseados y presione Buscar"> | ||
</plex-label> | ||
</div> | ||
</cdk-virtual-scroll-viewport> | ||
</ng-container> | ||
</ng-container> | ||
</plex-layout-main> | ||
|
||
<!-- Prestacion --> | ||
<plex-layout-sidebar *ngIf="showPrestacion"> | ||
<plex-title titulo="Prestación" size="md"> | ||
<plex-button icon="close" type="danger" (click)="onClose()" size="sm"></plex-button> | ||
</plex-title> | ||
<div *ngIf="!prestacion?.idPrestacion"> | ||
<plex-badge size="md" type="danger">La prestación no ha sido iniciada</plex-badge> | ||
</div> | ||
<div *ngIf="prestacion?.idPrestacion"> | ||
<div class="row"> | ||
<div class="col"> | ||
<div *ngIf="prestacion?.prestacion"> | ||
<label>Tipo de prestación</label>{{prestacion.prestacion?.term}} | ||
</div> | ||
</div> | ||
<div class="col"> | ||
<div *ngIf="prestacion?.actividad"> | ||
<label>Actividad</label>{{prestacion.actividad}}{{prestacion.tematica && ' / ' + | ||
prestacion.tematica}} | ||
</div> | ||
</div> | ||
</div> | ||
<div class="row"> | ||
<div class="col"> | ||
<div *ngIf="prestacion?.profesionales"> | ||
<label>Profesionales</label> | ||
<div *ngFor="let profesional of prestacion.profesionales let i = index">{{profesional | | ||
nombre}} | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
<div class="row"> | ||
<div class="col"> | ||
<div> | ||
<label>Fecha de la prestación</label> | ||
<span>{{ prestacion.fecha | fecha }}</span> | ||
</div> | ||
</div> | ||
<div class="col"> | ||
<div> | ||
<label>Estado</label> | ||
<span>{{ prestacion.estado }}</span> | ||
</div> | ||
</div> | ||
</div> | ||
<div class="row" *ngIf="prestacion?.estadoActual"> | ||
<div class="col"> | ||
<div> | ||
<label>Fecha de registro</label> | ||
<span> | ||
{{prestacion?.estadoActual.createdAt.fecha | fecha }} | ||
{{prestacion?.estadoActual.createdAt.fecha | hora }} | ||
</span> | ||
<span></span> | ||
</div> | ||
</div> | ||
<div class="col"> | ||
<div> | ||
<label>Usuario que registra</label> | ||
<span>{{prestacion?.estadoActual.createdBy.nombreCompleto}} | ||
</span> | ||
<span></span> | ||
</div> | ||
</div> | ||
</div> | ||
<br> | ||
</div> | ||
|
||
<div *ngIf="prestacion?.idPrestacion"> | ||
<vista-prestacion [idPrestacion]="prestacion.idPrestacion"></vista-prestacion> | ||
</div> | ||
|
||
<div *ngIf="prestacion?.pacientes?.length"> | ||
<plex-title titulo="Pacientes" size="md"></plex-title> | ||
<table class="table table-striped table-sm"> | ||
<tbody> | ||
<tr *ngFor="let paciente of pacientes"> | ||
<td>{{paciente.nombreCompleto}}</td> | ||
<td>{{paciente.edadReal.valor}} {{paciente.edadReal.unidad}}</td> | ||
<td>{{paciente.documento || paciente.numeroIdentificacion}}</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
</div> | ||
|
||
<div *ngIf="prestacion?.documentos?.length"> | ||
<plex-title titulo="Documentos adjuntos" size="md"></plex-title> | ||
<table class="table table-striped table-sm"> | ||
<tbody> | ||
<tr *ngFor="let documento of prestacion?.documentos"> | ||
<td class="align-middle">{{documento.descripcion.term}}</td> | ||
<td class="text-right"> | ||
<plex-button type="info" size="sm" icon="download" tooltip="Descargar" | ||
tooltipPosition="left" (click)="getAdjunto(documento)"> | ||
</plex-button> | ||
</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
</div> | ||
</plex-layout-sidebar> | ||
</plex-layout> |
Oops, something went wrong.