Skip to content

Commit

Permalink
feat(CIT): implementa mockup en sobreturno
Browse files Browse the repository at this point in the history
  • Loading branch information
ma7payne committed Mar 9, 2023
1 parent 3a7ae97 commit c815f9f
Show file tree
Hide file tree
Showing 7 changed files with 575 additions and 126 deletions.
4 changes: 2 additions & 2 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,9 @@ registerLocaleData(localeEs, 'es');
PlanificarAgendaComponent,
BuscadorCie10Component, PanelEspacioComponent, EspacioFisicoComponent, EditEspacioFisicoComponent, FiltrosMapaEspacioFisicoComponent,
GestorAgendasComponent, TurnosComponent, ClonarAgendaComponent, ModalAgendaComponent,
RevisionAgendaComponent, RevisionFueraAgendaComponent,
RevisionAgendaComponent, AgregarSobreturnoComponent, RevisionFueraAgendaComponent,
LiberarTurnoComponent, SuspenderTurnoComponent, AgregarNotaTurnoComponent, AgregarNotaAgendaComponent,
AgregarSobreturnoComponent, PanelAgendaComponent,
PanelAgendaComponent,
AgregarPacienteComponent,
ReasignarTurnoComponent, ReasignarTurnoAutomaticoComponent, EstadisticasAgendasComponent, EstadisticasPacientesComponent,
PermisosComponent,
Expand Down
3 changes: 3 additions & 0 deletions src/app/components/turnos/citas.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { SharedModule } from '@andes/shared';
import { SortBloquesPipe } from '../../pipes/agenda-bloques.pipe';
import { EspacioFisicoPipe } from '../../pipes/espacioFisico.pipe';
import { DarTurnosComponent } from './dar-turnos/dar-turnos.component';
import { DarSobreturnoComponent } from './dar-turnos/dar-sobreturno.component';
import { CalendarioComponent } from './dar-turnos/calendario.component';
import { MPILibModule } from 'src/app/modules/mpi/mpi-lib.module';
import { DirectiveLibModule } from '../../directives/directives.module';
Expand All @@ -28,6 +29,7 @@ import { BotonesTurnosPipe } from './gestor-agendas/pipes/botonesTurnos.pipe';
],
declarations: [
DarTurnosComponent,
DarSobreturnoComponent,
CalendarioComponent,
SortBloquesPipe,
EspacioFisicoPipe,
Expand All @@ -37,6 +39,7 @@ import { BotonesTurnosPipe } from './gestor-agendas/pipes/botonesTurnos.pipe';
],
exports: [
DarTurnosComponent,
DarSobreturnoComponent,
SortBloquesPipe,
EspacioFisicoPipe,
CalendarioComponent,
Expand Down
326 changes: 326 additions & 0 deletions src/app/components/turnos/dar-turnos/dar-sobreturno.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,326 @@

import { Auth } from '@andes/auth';
import { Plex } from '@andes/plex';
import { PlexModalComponent } from '@andes/plex/src/lib/modal/modal.component';
import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { CarpetaPacienteService } from 'src/app/core/mpi/services/carpeta-paciente.service';
import { IPaciente } from '../../../core/mpi/interfaces/IPaciente';
import { PacienteService } from '../../../core/mpi/services/paciente.service';
import { AgendaService } from '../../../services/turnos/agenda.service';
import { ITipoPrestacion } from './../../../interfaces/ITipoPrestacion';
import { ObraSocialService } from './../../../services/obraSocial.service';

@Component({
selector: 'dar-sobreturno',
templateUrl: 'dar-sobreturno.html',
styleUrls: ['dar-sobreturno.scss']
})

export class DarSobreturnoComponent implements OnInit {
public nota: any;
public lenNota = 140;
public changeCarpeta: boolean;
public carpetaEfector: any;
public _agenda;
public agenda;
public loading = false;
public resultadoBusqueda: IPaciente[] = [];
public paciente: IPaciente;
public tipoPrestacion: ITipoPrestacion;
public resultado: any;
public showCreateUpdate = false;
public horaTurno = null;
public telefono = '';
public cambioTelefono = false;
public pacientes: any;
public obraSocialPaciente: any[] = [];
public prepagas: any[] = [];
showListaPrepagas: Boolean = false;
public seleccion = null;
public esEscaneado = false;
public hoy = new Date();
public inicio: Date;
public fin: Date;
public turno_link;
public modelo: any = {
obraSocial: '',
prepaga: ''
};
public sobreturno;
public panelSobreturno;

@ViewChild('modalSobreturno', { static: true }) modal: PlexModalComponent;
@Output() agregarSobreturno = new EventEmitter();
@Output() volverAlGestor = new EventEmitter();
@Input() idAgenda: any;
@Input() idPaciente: any;

constructor(
private plex: Plex,
private serviceAgenda: AgendaService,
private router: Router,
private auth: Auth,
private servicePaciente: PacienteService,
private serviceCarpetaPaciente: CarpetaPacienteService,
public obraSocialService: ObraSocialService) { }

ngOnInit() {
this.serviceAgenda.getById(this.idAgenda).subscribe(agenda => {
this._agenda = agenda;
this.agenda = agenda;
this.inicio = new Date(this.hoy.setHours(this.agenda.horaInicio.getHours(), this.agenda.horaInicio.getMinutes(), 0, 0));
this.fin = new Date(this.hoy.setHours(this.agenda.horaFin.getHours(), this.agenda.horaFin.getMinutes(), 0, 0));
if (this.agenda.tipoPrestaciones.length === 1) {
this.tipoPrestacion = this.agenda.tipoPrestaciones[0];
}
if (agenda.link) {
this.turno_link = agenda.link;
}
});

this.servicePaciente.getById(this.idPaciente).subscribe(res => {
this.paciente = res;
this.loadObraSocial(this.paciente);
});

this.carpetaEfector = {
organizacion: {
_id: this.auth.organizacion.id,
nombre: this.auth.organizacion.nombre
},
nroCarpeta: ''
};
}


afterCreateUpdate(paciente) {
this.showCreateUpdate = false;
if (paciente) {
this.servicePaciente.getById(paciente.id).subscribe(
pacienteMPI => {
this.paciente = pacienteMPI;
this.verificarTelefono(pacienteMPI);
});
}
}

loadObraSocial(paciente) {
// TODO: si es en colegio médico hay que buscar en el paciente
if (!paciente || !paciente.documento) {
return;
}
this.obraSocialService.getObrasSociales(paciente.documento).subscribe(resultado => {
if (resultado.length) {
this.obraSocialPaciente = resultado.map((os: any) => {
let osPaciente;

if (os.nombre) {
osPaciente = {
'id': os.nombre,
'label': os.nombre
};
} else {
osPaciente = {
'id': os.financiador,
'label': os.financiador
};
}
return osPaciente;
});
this.modelo.obraSocial = this.obraSocialPaciente[0].label;
}
this.obraSocialPaciente.push({ 'id': 'prepaga', 'label': 'Prepaga' });
});
}

seleccionarObraSocial(event) {
if (event.value === 'prepaga') {
this.obraSocialService.getPrepagas().subscribe(prepagas => {
this.showListaPrepagas = true;
this.prepagas = prepagas;
});
} else {
this.showListaPrepagas = false;
}
this.modelo.obraSocial = event && event.value;
}

// Operaciones con carpetaPaciente

// Se busca el número de carpeta de la Historia Clínica en papel del paciente
// a partir del documento y del efector
obtenerCarpetaPaciente() {
let indiceCarpeta = -1;
if (this.paciente.carpetaEfectores.length > 0) {
// Filtro por organizacion
indiceCarpeta = this.paciente.carpetaEfectores.findIndex(x => x.organizacion.id === this.auth.organizacion.id);
if (indiceCarpeta > -1) {
this.carpetaEfector = this.paciente.carpetaEfectores[indiceCarpeta];
}
}
if (indiceCarpeta === -1) {
// Si no hay carpeta en el paciente MPI, buscamos la carpeta en colección carpetaPaciente, usando el nro. de documento
this.serviceCarpetaPaciente.getNroCarpeta({ documento: this.paciente.documento, organizacion: this.auth.organizacion.id }).subscribe(carpeta => {
if (carpeta.nroCarpeta) {
this.carpetaEfector.nroCarpeta = carpeta.nroCarpeta;
this.changeCarpeta = true;
}
});
}
}

actualizarCarpetaPaciente() {
this.servicePaciente.patch(this.paciente.id, { op: 'updateCarpetaEfectores', carpetaEfectores: this.paciente.carpetaEfectores }).subscribe(resultadoCarpeta => {
});
}

// Se ejecuta al modificar el campo NroCarpeta
cambiarCarpeta() {
this.changeCarpeta = true;
}

verificarTelefono(paciente: IPaciente) {
// se busca entre los contactos si tiene un celular
this.telefono = '';
this.cambioTelefono = false;
if (paciente.contacto) {
if (paciente.contacto.length > 0) {
paciente.contacto.forEach((contacto) => {
if (contacto.tipo === 'celular') {
this.telefono = contacto.valor;
}
});
}
}
}

guardar($event) {
if ($event.formValid) {

const indiceCarpeta = this.paciente.carpetaEfectores.findIndex(x => x.organizacion.id === this.auth.organizacion.id);
if (indiceCarpeta > -1) {
this.paciente.carpetaEfectores[indiceCarpeta] = this.carpetaEfector;
} else {
this.paciente.carpetaEfectores.push(this.carpetaEfector);
}

let osPaciente: any;
if (this.modelo.obraSocial === 'prepaga') {
osPaciente = this.modelo.prepaga;
} else if (this.modelo.obraSocial === 'SUMAR') {
osPaciente = {
codigoPuco: null,
financiador: 'SUMAR',
nombre: null
};
} else {
osPaciente = this.paciente.financiador && this.paciente.financiador.find((os) => os.nombre === this.modelo.obraSocial);
}
const pacienteSave = {
id: this.paciente.id,
documento: this.paciente.documento,
apellido: this.paciente.apellido,
nombre: this.paciente.nombre,
fechaNacimiento: this.paciente.fechaNacimiento,
sexo: this.paciente.sexo,
telefono: this.telefono,
carpetaEfectores: this.paciente.carpetaEfectores,
obraSocial: osPaciente
};

// Si cambió el teléfono lo actualizo en el MPI
// Pero si borra, no actualiza en MPI.
if (this.cambioTelefono && this.telefono) {
const nuevoCel = {
'tipo': 'celular',
'valor': this.telefono,
'ranking': 1,
'activo': true,
'ultimaActualizacion': new Date()
};
let flagTelefono = false;
// Si tiene un celular en ranking 1 y activo cargado, se reemplaza el nro
// sino, se genera un nuevo contacto
if (this.paciente.contacto.length > 0) {
this.paciente.contacto.forEach((contacto, index) => {
if (contacto.tipo === 'celular') {
contacto.valor = this.telefono;
flagTelefono = true;
}
});
if (!flagTelefono) {
this.paciente.contacto.push(nuevoCel);
}
} else {
this.paciente.contacto = [nuevoCel];
}
const cambios = {
'op': 'updateContactos',
'contacto': this.paciente.contacto
};
this.servicePaciente.patch(pacienteSave.id, cambios).subscribe();
}

const patch = {
'op': 'agregarSobreturno',
'sobreturno': {
horaInicio: this.combinarFechas(this.agenda.horaInicio, this.horaTurno),
link: this.turno_link,
estado: 'asignado',
tipoPrestacion: this.tipoPrestacion,
paciente: pacienteSave,
nota: this.nota
}
};

this.serviceAgenda.patch(this.agenda.id, patch).subscribe(resultado => {
if (this.changeCarpeta) {
this.actualizarCarpetaPaciente();
}

this.sobreturno = resultado.sobreturnos.slice(-1)[0];
this.modal.show();
});
} else {
this.plex.info('warning', 'Debe completar los datos requeridos');
}
}

combinarFechas(fecha1, fecha2) {
if (fecha1 && fecha2) {
const auxiliar = new Date(fecha1);
const horas = fecha2.getHours();
const minutes = fecha2.getMinutes();
auxiliar.setHours(horas, minutes, 0, 0);
return auxiliar;
} else {
return null;
}
}

verificarNota() {
if (this.nota && this.nota.length > this.lenNota) {
this.nota = this.nota.substring(0, this.lenNota);
}
}

public volver() {
this.modal.close();
this.volverAlGestor.emit();
this.agregarSobreturno.emit();
}

public cancelar() {
this.agregarSobreturno.emit();
}

public getEquipoProfesional() {
let equipo = '';
this.agenda?.profesionales.forEach((profesional) => {
equipo += `${profesional.nombre} ${profesional.apellido}, `;
});

return equipo === '' ? '-' : equipo.slice(0, -2);
}
}
Loading

0 comments on commit c815f9f

Please sign in to comment.