Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions projects/shared/src/lib/pipes/nombre.pipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ export class NombrePipe implements PipeTransform {
transform(value: any): any {
if (!value) {
return null;
} else if (value.alias) {
return value.apellido + ', ' + value.alias;
}
const data = (value.referencia && typeof value.referencia === 'object' && (value.referencia.nombre || value.referencia.apellido))
? value.referencia : value;
if (data.alias) {
return data.apellido + ', ' + data.alias;
} else {
if (value.apellido && value.nombre) {
return value.apellido + ', ' + value.nombre;
if (data.apellido && data.nombre) {
return data.apellido + ', ' + data.nombre;
} else {
return (value.apellido ? value.apellido : value.nombre);
return (data.apellido ? data.apellido : data.nombre);
}
}
}
Expand Down
41 changes: 7 additions & 34 deletions src/app/core/mpi/components/datos-basicos.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,24 +55,9 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit,
showBuscador = true;
searchClear = true;
relacionBebe: IPacienteRelacion = {
id: null,
relacion: {
id: '',
nombre: '',
opuesto: ''
},
relacion: null,
referencia: '',
nombre: '',
alias: '',
genero: '',
numeroIdentificacion: '',
apellido: '',
documento: '',
fechaNacimiento: null,
fechaFallecimiento: null,
sexo: '',
foto: null,
fotoId: null
activo: true
};
pacienteFallecido: any;
fechaFallecimientoTemporal: Date = null;
Expand Down Expand Up @@ -291,23 +276,11 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit,
if (pacienteSelected) {
this.pacienteService.getById(pacienteSelected.id).subscribe(paciente => {
// Relacionamos al bebe con su progenitor/a
this.relacionBebe.apellido = paciente.apellido;
this.relacionBebe.nombre = paciente.nombre;
this.relacionBebe.alias = paciente.alias;
this.relacionBebe.genero = paciente.genero;
this.relacionBebe.documento = paciente.documento;
this.relacionBebe.numeroIdentificacion = paciente.numeroIdentificacion;
this.relacionBebe.fechaNacimiento = paciente.fechaNacimiento;
this.relacionBebe.fechaFallecimiento = paciente.fechaFallecimiento;
this.relacionBebe.sexo = paciente.sexo;
this.relacionBebe.fotoId = paciente.fotoId ? paciente.fotoId : null;
this.relacionBebe.referencia = paciente.id;
const rel = this.parentescoModel.find((elem) => {
if (elem.nombre === 'progenitor/a') {
return elem;
}
});
this.relacionBebe.relacion = rel;
this.relacionBebe = {
referencia: paciente,
relacion: this.parentescoModel.find(elem => elem.nombre === 'progenitor/a'),
activo: true
};
this.paciente.relaciones = [this.relacionBebe];

/* Si no se cargó ninguna dirección, tomamos el dato de la madre/padre/tutor */
Expand Down
47 changes: 32 additions & 15 deletions src/app/core/mpi/components/paciente.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,15 @@ export class PacienteComponent implements OnInit {
return elem;
});

if (pacienteGuardar.relaciones) {
pacienteGuardar.relaciones = pacienteGuardar.relaciones.map(rel => {
if (rel.referencia && typeof rel.referencia === 'object' && (rel.referencia.nombre || rel.referencia.apellido)) {
return { ...rel, referencia: rel.referencia.id || rel.referencia._id };
}
return rel;
});
}

return pacienteGuardar;
}

Expand Down Expand Up @@ -485,13 +494,21 @@ export class PacienteComponent implements OnInit {
if (unPacienteSave) {
// Borramos relaciones
this.relacionesBorradas.forEach(rel => {
if (rel.referencia) {
this.pacienteService.getById(rel.referencia).pipe(
const idReferencia = rel.referencia?.id || rel.referencia?._id || rel.referencia;
if (idReferencia) {
this.pacienteService.getById(idReferencia).pipe(
map(pac => {
const index = pac.relaciones?.findIndex((unaRel: any) => unaRel.referencia === unPacienteSave.id);
const index = pac.relaciones?.findIndex((unaRel: any) => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === unPacienteSave.id);
if (index >= 0) {
pac.relaciones.splice(index, 1);
}
// Limpiamos referencias por si están populadas
pac.relaciones = pac.relaciones?.map(r => {
if (r.referencia && typeof r.referencia === 'object' && (r.referencia.nombre || r.referencia.apellido)) {
return { ...r, referencia: r.referencia.id || r.referencia._id };
}
return r;
});
return pac;
}),
mergeMap(pac => {
Expand All @@ -509,27 +526,27 @@ export class PacienteComponent implements OnInit {
});
relacionOpuesta['esConviviente'] = rel.relacion.esConviviente ? rel.relacion.esConviviente : false;
const dto = {
id: null,
activo: unPacienteSave.activo,
relacion: relacionOpuesta,
referencia: unPacienteSave.id,
nombre: unPacienteSave.nombre,
apellido: unPacienteSave.apellido,
fechaNacimiento: unPacienteSave.fechaNacimiento,
documento: (unPacienteSave.documento) ? unPacienteSave.documento : null,
numeroIdentificacion: (unPacienteSave.numeroIdentificacion) ? unPacienteSave.numeroIdentificacion : null,
foto: unPacienteSave.foto ? unPacienteSave.foto : null,
fotoId: unPacienteSave.fotoId ? unPacienteSave.fotoId : null
activo: unPacienteSave.activo,
};
if (dto.referencia) {
this.pacienteService.getById(rel.referencia).pipe(
const idReferencia = rel.referencia?.id || rel.referencia?._id || rel.referencia;
if (idReferencia) {
this.pacienteService.getById(idReferencia).pipe(
map(pac => {
const index = pac.relaciones?.findIndex((unaRel: any) => unaRel.referencia === unPacienteSave.id);
const index = pac.relaciones?.findIndex((unaRel: any) => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === unPacienteSave.id);
if (index >= 0) {
pac.relaciones[index] = dto;
} else {
pac.relaciones?.length ? pac.relaciones.push(dto) : pac.relaciones = [dto];
}
// Limpiamos referencias por si están populadas
pac.relaciones = pac.relaciones?.map(r => {
if (r.referencia && typeof r.referencia === 'object' && (r.referencia.nombre || r.referencia.apellido)) {
return { ...r, referencia: r.referencia.id || r.referencia._id };
}
return r;
});
return pac;
}),
mergeMap(pac => {
Expand Down
64 changes: 18 additions & 46 deletions src/app/core/mpi/components/relaciones-pacientes.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export class RelacionesPacientesComponent implements OnInit {
if (valor.relaciones) {
this.relacionesIniciales = valor.relaciones.slice(0, valor.relaciones.length);
this.idPacientesRelacionados = this.relacionesIniciales.map(rel => {
return { id: rel.referencia };
return { id: rel.referencia?.id || rel.referencia?._id || rel.referencia };
});
}
}
Expand Down Expand Up @@ -90,7 +90,7 @@ export class RelacionesPacientesComponent implements OnInit {
// Se eliminan de los resultados de la búsqueda los pacientes ya relacionados
if (this.paciente.relaciones && this.paciente.relaciones.length) {
for (let i = 0; i < this.paciente.relaciones.length; i++) {
listaPacientes = listaPacientes.filter(p => p.id !== this.paciente.relaciones[i].referencia);
listaPacientes = listaPacientes.filter(p => p.id !== (this.paciente.relaciones[i].referencia?.id || this.paciente.relaciones[i].referencia?._id || this.paciente.relaciones[i].referencia));
}
}
this.posiblesRelaciones = listaPacientes;
Expand All @@ -109,53 +109,24 @@ export class RelacionesPacientesComponent implements OnInit {

addRelacion(unaRelacion) {
// Es una relacion existente?
const idReferencia = unaRelacion.referencia?.id || unaRelacion.referencia?._id || unaRelacion.referencia;
if (unaRelacion.referencia) {
unaRelacion.relacion.esConviviente !== undefined ? unaRelacion.relacion.esConviviente = this.esConviviente : unaRelacion.relacion['esConviviente'] = this.esConviviente;
// Se la agrega al array de relaciones nuevas/editadas
let index = this.relacionesEdit.findIndex(rel => rel.referencia === unaRelacion.referencia);
let index = this.relacionesEdit.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === idReferencia);
index >= 0 ? this.relacionesEdit[index] = unaRelacion : this.relacionesEdit.push(unaRelacion);
// Se actualiza el array de relaciones del paciente para que impacte en las vistas
index = this.paciente.relaciones.findIndex(rel => rel.referencia === unaRelacion.referencia);
index = this.paciente.relaciones.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === idReferencia);
this.paciente.relaciones[index] = unaRelacion;
} else {
// relacion inexistente, construimos una nueva
this.buscarPacRel = '';
const nuevaRelacion: IPacienteRelacion = Object.assign({}, {
id: null,
relacion: null,
referencia: null,
nombre: '',
apellido: '',
documento: '',
fechaNacimiento: null,
fechaFallecimiento: null,
numeroIdentificacion: '',
foto: null,
fotoId: null,
activo: true,
});

// Se completan los campos de la nueva relación
nuevaRelacion.referencia = unaRelacion.id;
nuevaRelacion.apellido = unaRelacion.apellido;
nuevaRelacion.nombre = unaRelacion.nombre;
nuevaRelacion.relacion = unaRelacion.relacion;
const nuevaRelacion: IPacienteRelacion = {
referencia: unaRelacion,
relacion: unaRelacion.relacion,
activo: true
};
nuevaRelacion.relacion['esConviviente'] = this.esConviviente;
if (unaRelacion.documento) {
nuevaRelacion.documento = unaRelacion.documento;
}
if (unaRelacion.numeroIdentificacion) {
nuevaRelacion.numeroIdentificacion = unaRelacion.numeroIdentificacion;
}
if (unaRelacion.fotoId) {
nuevaRelacion.fotoId = unaRelacion.fotoId;
}
if (unaRelacion.fechaNacimiento) {
nuevaRelacion.fechaNacimiento = unaRelacion.fechaNacimiento;
}
if (unaRelacion.fechaFallecimiento) {
nuevaRelacion.fechaFallecimiento = unaRelacion.fechaFallecimiento;
}

// Se inserta nueva relación en array de relaciones del paciente
if (this.paciente.relaciones && this.paciente.relaciones.length) {
Expand All @@ -164,12 +135,12 @@ export class RelacionesPacientesComponent implements OnInit {
this.paciente.relaciones = [nuevaRelacion];
}
// Se inserta en el array de relaciones nuevas/editadas
let index = this.relacionesEdit.findIndex(rel => rel.referencia === nuevaRelacion.referencia);
index >= 0 ? this.relacionesEdit[index] = unaRelacion : this.relacionesEdit.push(nuevaRelacion);
this.idPacientesRelacionados.push({ id: nuevaRelacion.referencia });
let index = this.relacionesEdit.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === (nuevaRelacion.referencia?.id || nuevaRelacion.referencia?._id || nuevaRelacion.referencia));
index >= 0 ? this.relacionesEdit[index] = nuevaRelacion : this.relacionesEdit.push(nuevaRelacion);
this.idPacientesRelacionados.push({ id: nuevaRelacion.referencia.id || nuevaRelacion.referencia });

// Si esta relación fue borrada anteriormente en esta edición, se quita del arreglo 'relacionesBorradas'
index = this.relacionesBorradas.findIndex(rel => rel.referencia === nuevaRelacion.referencia);
index = this.relacionesBorradas.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === (nuevaRelacion.referencia?.id || nuevaRelacion.referencia?._id || nuevaRelacion.referencia));
if (index >= 0) {
this.relacionesBorradas.splice(index, 1);
}
Expand All @@ -189,13 +160,14 @@ export class RelacionesPacientesComponent implements OnInit {
removeRelacion(i) {
if (i >= 0) {
// si la relacion borrada ya se encotraba almacenada en la DB
const index = this.relacionesIniciales.findIndex(unaRel => unaRel.referencia === this.paciente.relaciones[i].referencia);
const idReferenciaBorrar = this.paciente.relaciones[i].referencia?.id || this.paciente.relaciones[i].referencia?._id || this.paciente.relaciones[i].referencia;
const index = this.relacionesIniciales.findIndex(unaRel => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === idReferenciaBorrar);
if (index >= 0) {
this.relacionesBorradas.push(this.paciente.relaciones[i]);
}
this.paciente.relaciones.splice(i, 1);
this.idPacientesRelacionados = this.paciente.relaciones.map(rel => {
return { id: rel.referencia };
return { id: rel.referencia?.id || rel.referencia?._id || rel.referencia };
});
// notificamos cambios
this.actualizar.emit({
Expand All @@ -207,7 +179,7 @@ export class RelacionesPacientesComponent implements OnInit {


public onChange(data) {
const index = this.paciente.relaciones.findIndex((rel: any) => rel.referencia === data.idRelacionado);
const index = this.paciente.relaciones.findIndex((rel: any) => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === data.idRelacionado);
if (index >= 0) {
if (data.operacion === 'edit') {
// se muestra en panel principal para su edicion
Expand Down
14 changes: 9 additions & 5 deletions src/app/core/mpi/components/relaciones-pacientes.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,28 @@
<plex-list *ngIf="relacionEntrante.length">
<plex-item *ngFor="let unaRel of relacionEntrante" class="">
<!-- caso paciente relacionado -->
<img *ngIf="unaRel.referencia" [ngClass]="{'img-fallecido' : unaRel.fechaFallecimiento}"
[mpiFotoPaciente]="{id: unaRel.referencia, fotoId: unaRel.fotoId}">
<img *ngIf="unaRel.referencia"
[ngClass]="{'img-fallecido' : unaRel.fechaFallecimiento || unaRel.referencia?.fechaFallecimiento}"
[mpiFotoPaciente]="{id: unaRel.referencia?.id || unaRel.referencia, fotoId: unaRel.fotoId || unaRel.referencia?.fotoId}">
<!-- caso paciente aun no relacionado -->
<img *ngIf="!unaRel.referencia && unaRel.id && unaRel.fotoId"
[ngClass]="{'img-fallecido' : unaRel.fechaFallecimiento}"
[mpiFotoPaciente]="{id: unaRel.id, fotoId: unaRel.fotoId}" alt="">

<plex-label titulo="{{ unaRel | nombre }}" subtitulo="{{ unaRel | documento }}">
<plex-label titulo="{{ unaRel | nombre }}"
subtitulo="{{ (unaRel.documento || unaRel.referencia?.documento | number) || 'Sin DNI' }}">
</plex-label>

<plex-label *ngIf="unaRel.fechaNacimiento" titulo="{{ unaRel | edad }}"
subtitulo="{{ (unaRel.fechaNacimiento | fecha:'utc') || 'Desconocida' }}">
<plex-label *ngIf="unaRel.fechaNacimiento || unaRel.referencia?.fechaNacimiento"
titulo="{{ (unaRel.fechaNacimiento || unaRel.referencia?.fechaNacimiento) | edad }}"
subtitulo="{{ (unaRel.fechaNacimiento || unaRel.referencia?.fechaNacimiento | fecha:'utc') || 'Desconocida' }}">
</plex-label>

<plex-grid size="sm" type="full">
<plex-select class="vinculo" [(ngModel)]="unaRel.relacion" name="nuevaRelacion" [data]="parentescoModel"
[required]="true" placeholder="Seleccione vínculo... ">
</plex-select>

</plex-grid>

<!-- Se muestra con un 'OR' porque no todas las relaciones guardan el genero -->
Expand Down
2 changes: 1 addition & 1 deletion src/app/core/mpi/interfaces/IPaciente.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export interface IPaciente {
fotoId: string;
foto: string;
createdBy: ICreatedBy;
relaciones: [IPacienteRelacion];
relaciones: IPacienteRelacion[];

financiador: [{
codigoPuco: Number;
Expand Down
14 changes: 8 additions & 6 deletions src/app/modules/mpi/components/paciente-detalle.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,14 +160,16 @@ export class PacienteDetalleComponent implements OnInit, OnChanges {
private doRelaciones() {
if (this.paciente?.relaciones?.length) {
this.relaciones = this.paciente.relaciones.map(rel => {
const referencia = rel.referencia;
const isPopulated = referencia?.id || referencia?._id;
return {
id: rel.referencia,
apellido: rel.apellido,
nombre: rel.nombre,
documento: rel.documento,
numeroIdentificacion: rel.numeroIdentificacion,
id: isPopulated ? (referencia.id || referencia._id) : referencia,
apellido: isPopulated ? referencia.apellido : rel.apellido,
nombre: isPopulated ? referencia.nombre : rel.nombre,
documento: isPopulated ? referencia.documento : rel.documento,
numeroIdentificacion: isPopulated ? referencia.numeroIdentificacion : rel.numeroIdentificacion,
parentesco: (rel.relacion) ? rel.relacion.nombre : 'Relación S/D',
fotoId: rel.fotoId
fotoId: isPopulated ? referencia.fotoId : rel.fotoId
};
});
} else {
Expand Down
6 changes: 4 additions & 2 deletions src/app/modules/mpi/components/paciente-panel.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,12 @@ export class PacientePanelComponent {
}

public editRelacion(relacion: any) {
this.changeRelacion.emit({ operacion: 'edit', idRelacionado: relacion.referencia });
const idRelacionado = relacion.referencia?.id || relacion.referencia?._id || relacion.referencia;
this.changeRelacion.emit({ operacion: 'edit', idRelacionado });
}

public removeRelacion(relacion: any) {
this.changeRelacion.emit({ operacion: 'remove', idRelacionado: relacion.referencia });
const idRelacionado = relacion.referencia?.id || relacion.referencia?._id || relacion.referencia;
this.changeRelacion.emit({ operacion: 'remove', idRelacionado });
}
}
Loading