Skip to content

Commit 92f54f8

Browse files
committed
feat(MPI):"Cambiar objeto en relaciones por ID"
1 parent 03872c2 commit 92f54f8

9 files changed

Lines changed: 94 additions & 122 deletions

File tree

projects/shared/src/lib/pipes/nombre.pipe.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ export class NombrePipe implements PipeTransform {
66
transform(value: any): any {
77
if (!value) {
88
return null;
9-
} else if (value.alias) {
10-
return value.apellido + ', ' + value.alias;
9+
}
10+
const data = (value.referencia && typeof value.referencia === 'object' && (value.referencia.nombre || value.referencia.apellido))
11+
? value.referencia : value;
12+
if (data.alias) {
13+
return data.apellido + ', ' + data.alias;
1114
} else {
12-
if (value.apellido && value.nombre) {
13-
return value.apellido + ', ' + value.nombre;
15+
if (data.apellido && data.nombre) {
16+
return data.apellido + ', ' + data.nombre;
1417
} else {
15-
return (value.apellido ? value.apellido : value.nombre);
18+
return (data.apellido ? data.apellido : data.nombre);
1619
}
1720
}
1821
}

src/app/core/mpi/components/datos-basicos.component.ts

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -55,24 +55,9 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit,
5555
showBuscador = true;
5656
searchClear = true;
5757
relacionBebe: IPacienteRelacion = {
58-
id: null,
59-
relacion: {
60-
id: '',
61-
nombre: '',
62-
opuesto: ''
63-
},
58+
relacion: null,
6459
referencia: '',
65-
nombre: '',
66-
alias: '',
67-
genero: '',
68-
numeroIdentificacion: '',
69-
apellido: '',
70-
documento: '',
71-
fechaNacimiento: null,
72-
fechaFallecimiento: null,
73-
sexo: '',
74-
foto: null,
75-
fotoId: null
60+
activo: true
7661
};
7762
pacienteFallecido: any;
7863
fechaFallecimientoTemporal: Date = null;
@@ -291,23 +276,11 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit,
291276
if (pacienteSelected) {
292277
this.pacienteService.getById(pacienteSelected.id).subscribe(paciente => {
293278
// Relacionamos al bebe con su progenitor/a
294-
this.relacionBebe.apellido = paciente.apellido;
295-
this.relacionBebe.nombre = paciente.nombre;
296-
this.relacionBebe.alias = paciente.alias;
297-
this.relacionBebe.genero = paciente.genero;
298-
this.relacionBebe.documento = paciente.documento;
299-
this.relacionBebe.numeroIdentificacion = paciente.numeroIdentificacion;
300-
this.relacionBebe.fechaNacimiento = paciente.fechaNacimiento;
301-
this.relacionBebe.fechaFallecimiento = paciente.fechaFallecimiento;
302-
this.relacionBebe.sexo = paciente.sexo;
303-
this.relacionBebe.fotoId = paciente.fotoId ? paciente.fotoId : null;
304-
this.relacionBebe.referencia = paciente.id;
305-
const rel = this.parentescoModel.find((elem) => {
306-
if (elem.nombre === 'progenitor/a') {
307-
return elem;
308-
}
309-
});
310-
this.relacionBebe.relacion = rel;
279+
this.relacionBebe = {
280+
referencia: paciente,
281+
relacion: this.parentescoModel.find(elem => elem.nombre === 'progenitor/a'),
282+
activo: true
283+
};
311284
this.paciente.relaciones = [this.relacionBebe];
312285

313286
/* Si no se cargó ninguna dirección, tomamos el dato de la madre/padre/tutor */

src/app/core/mpi/components/paciente.component.ts

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,15 @@ export class PacienteComponent implements OnInit {
333333
return elem;
334334
});
335335

336+
if (pacienteGuardar.relaciones) {
337+
pacienteGuardar.relaciones = pacienteGuardar.relaciones.map(rel => {
338+
if (rel.referencia && typeof rel.referencia === 'object' && (rel.referencia.nombre || rel.referencia.apellido)) {
339+
return { ...rel, referencia: rel.referencia.id || rel.referencia._id };
340+
}
341+
return rel;
342+
});
343+
}
344+
336345
return pacienteGuardar;
337346
}
338347

@@ -485,13 +494,21 @@ export class PacienteComponent implements OnInit {
485494
if (unPacienteSave) {
486495
// Borramos relaciones
487496
this.relacionesBorradas.forEach(rel => {
488-
if (rel.referencia) {
489-
this.pacienteService.getById(rel.referencia).pipe(
497+
const idReferencia = rel.referencia?.id || rel.referencia?._id || rel.referencia;
498+
if (idReferencia) {
499+
this.pacienteService.getById(idReferencia).pipe(
490500
map(pac => {
491-
const index = pac.relaciones?.findIndex((unaRel: any) => unaRel.referencia === unPacienteSave.id);
501+
const index = pac.relaciones?.findIndex((unaRel: any) => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === unPacienteSave.id);
492502
if (index >= 0) {
493503
pac.relaciones.splice(index, 1);
494504
}
505+
// Limpiamos referencias por si están populadas
506+
pac.relaciones = pac.relaciones?.map(r => {
507+
if (r.referencia && typeof r.referencia === 'object' && (r.referencia.nombre || r.referencia.apellido)) {
508+
return { ...r, referencia: r.referencia.id || r.referencia._id };
509+
}
510+
return r;
511+
});
495512
return pac;
496513
}),
497514
mergeMap(pac => {
@@ -509,27 +526,27 @@ export class PacienteComponent implements OnInit {
509526
});
510527
relacionOpuesta['esConviviente'] = rel.relacion.esConviviente ? rel.relacion.esConviviente : false;
511528
const dto = {
512-
id: null,
513-
activo: unPacienteSave.activo,
514529
relacion: relacionOpuesta,
515530
referencia: unPacienteSave.id,
516-
nombre: unPacienteSave.nombre,
517-
apellido: unPacienteSave.apellido,
518-
fechaNacimiento: unPacienteSave.fechaNacimiento,
519-
documento: (unPacienteSave.documento) ? unPacienteSave.documento : null,
520-
numeroIdentificacion: (unPacienteSave.numeroIdentificacion) ? unPacienteSave.numeroIdentificacion : null,
521-
foto: unPacienteSave.foto ? unPacienteSave.foto : null,
522-
fotoId: unPacienteSave.fotoId ? unPacienteSave.fotoId : null
531+
activo: unPacienteSave.activo,
523532
};
524-
if (dto.referencia) {
525-
this.pacienteService.getById(rel.referencia).pipe(
533+
const idReferencia = rel.referencia?.id || rel.referencia?._id || rel.referencia;
534+
if (idReferencia) {
535+
this.pacienteService.getById(idReferencia).pipe(
526536
map(pac => {
527-
const index = pac.relaciones?.findIndex((unaRel: any) => unaRel.referencia === unPacienteSave.id);
537+
const index = pac.relaciones?.findIndex((unaRel: any) => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === unPacienteSave.id);
528538
if (index >= 0) {
529539
pac.relaciones[index] = dto;
530540
} else {
531541
pac.relaciones?.length ? pac.relaciones.push(dto) : pac.relaciones = [dto];
532542
}
543+
// Limpiamos referencias por si están populadas
544+
pac.relaciones = pac.relaciones?.map(r => {
545+
if (r.referencia && typeof r.referencia === 'object' && (r.referencia.nombre || r.referencia.apellido)) {
546+
return { ...r, referencia: r.referencia.id || r.referencia._id };
547+
}
548+
return r;
549+
});
533550
return pac;
534551
}),
535552
mergeMap(pac => {

src/app/core/mpi/components/relaciones-pacientes.component.ts

Lines changed: 18 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export class RelacionesPacientesComponent implements OnInit {
2323
if (valor.relaciones) {
2424
this.relacionesIniciales = valor.relaciones.slice(0, valor.relaciones.length);
2525
this.idPacientesRelacionados = this.relacionesIniciales.map(rel => {
26-
return { id: rel.referencia };
26+
return { id: rel.referencia?.id || rel.referencia?._id || rel.referencia };
2727
});
2828
}
2929
}
@@ -90,7 +90,7 @@ export class RelacionesPacientesComponent implements OnInit {
9090
// Se eliminan de los resultados de la búsqueda los pacientes ya relacionados
9191
if (this.paciente.relaciones && this.paciente.relaciones.length) {
9292
for (let i = 0; i < this.paciente.relaciones.length; i++) {
93-
listaPacientes = listaPacientes.filter(p => p.id !== this.paciente.relaciones[i].referencia);
93+
listaPacientes = listaPacientes.filter(p => p.id !== (this.paciente.relaciones[i].referencia?.id || this.paciente.relaciones[i].referencia?._id || this.paciente.relaciones[i].referencia));
9494
}
9595
}
9696
this.posiblesRelaciones = listaPacientes;
@@ -109,53 +109,24 @@ export class RelacionesPacientesComponent implements OnInit {
109109

110110
addRelacion(unaRelacion) {
111111
// Es una relacion existente?
112+
const idReferencia = unaRelacion.referencia?.id || unaRelacion.referencia?._id || unaRelacion.referencia;
112113
if (unaRelacion.referencia) {
113114
unaRelacion.relacion.esConviviente !== undefined ? unaRelacion.relacion.esConviviente = this.esConviviente : unaRelacion.relacion['esConviviente'] = this.esConviviente;
114115
// Se la agrega al array de relaciones nuevas/editadas
115-
let index = this.relacionesEdit.findIndex(rel => rel.referencia === unaRelacion.referencia);
116+
let index = this.relacionesEdit.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === idReferencia);
116117
index >= 0 ? this.relacionesEdit[index] = unaRelacion : this.relacionesEdit.push(unaRelacion);
117118
// Se actualiza el array de relaciones del paciente para que impacte en las vistas
118-
index = this.paciente.relaciones.findIndex(rel => rel.referencia === unaRelacion.referencia);
119+
index = this.paciente.relaciones.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === idReferencia);
119120
this.paciente.relaciones[index] = unaRelacion;
120121
} else {
121122
// relacion inexistente, construimos una nueva
122123
this.buscarPacRel = '';
123-
const nuevaRelacion: IPacienteRelacion = Object.assign({}, {
124-
id: null,
125-
relacion: null,
126-
referencia: null,
127-
nombre: '',
128-
apellido: '',
129-
documento: '',
130-
fechaNacimiento: null,
131-
fechaFallecimiento: null,
132-
numeroIdentificacion: '',
133-
foto: null,
134-
fotoId: null,
135-
activo: true,
136-
});
137-
138-
// Se completan los campos de la nueva relación
139-
nuevaRelacion.referencia = unaRelacion.id;
140-
nuevaRelacion.apellido = unaRelacion.apellido;
141-
nuevaRelacion.nombre = unaRelacion.nombre;
142-
nuevaRelacion.relacion = unaRelacion.relacion;
124+
const nuevaRelacion: IPacienteRelacion = {
125+
referencia: unaRelacion,
126+
relacion: unaRelacion.relacion,
127+
activo: true
128+
};
143129
nuevaRelacion.relacion['esConviviente'] = this.esConviviente;
144-
if (unaRelacion.documento) {
145-
nuevaRelacion.documento = unaRelacion.documento;
146-
}
147-
if (unaRelacion.numeroIdentificacion) {
148-
nuevaRelacion.numeroIdentificacion = unaRelacion.numeroIdentificacion;
149-
}
150-
if (unaRelacion.fotoId) {
151-
nuevaRelacion.fotoId = unaRelacion.fotoId;
152-
}
153-
if (unaRelacion.fechaNacimiento) {
154-
nuevaRelacion.fechaNacimiento = unaRelacion.fechaNacimiento;
155-
}
156-
if (unaRelacion.fechaFallecimiento) {
157-
nuevaRelacion.fechaFallecimiento = unaRelacion.fechaFallecimiento;
158-
}
159130

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

171142
// Si esta relación fue borrada anteriormente en esta edición, se quita del arreglo 'relacionesBorradas'
172-
index = this.relacionesBorradas.findIndex(rel => rel.referencia === nuevaRelacion.referencia);
143+
index = this.relacionesBorradas.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === (nuevaRelacion.referencia?.id || nuevaRelacion.referencia?._id || nuevaRelacion.referencia));
173144
if (index >= 0) {
174145
this.relacionesBorradas.splice(index, 1);
175146
}
@@ -189,13 +160,14 @@ export class RelacionesPacientesComponent implements OnInit {
189160
removeRelacion(i) {
190161
if (i >= 0) {
191162
// si la relacion borrada ya se encotraba almacenada en la DB
192-
const index = this.relacionesIniciales.findIndex(unaRel => unaRel.referencia === this.paciente.relaciones[i].referencia);
163+
const idReferenciaBorrar = this.paciente.relaciones[i].referencia?.id || this.paciente.relaciones[i].referencia?._id || this.paciente.relaciones[i].referencia;
164+
const index = this.relacionesIniciales.findIndex(unaRel => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === idReferenciaBorrar);
193165
if (index >= 0) {
194166
this.relacionesBorradas.push(this.paciente.relaciones[i]);
195167
}
196168
this.paciente.relaciones.splice(i, 1);
197169
this.idPacientesRelacionados = this.paciente.relaciones.map(rel => {
198-
return { id: rel.referencia };
170+
return { id: rel.referencia?.id || rel.referencia?._id || rel.referencia };
199171
});
200172
// notificamos cambios
201173
this.actualizar.emit({
@@ -207,7 +179,7 @@ export class RelacionesPacientesComponent implements OnInit {
207179

208180

209181
public onChange(data) {
210-
const index = this.paciente.relaciones.findIndex((rel: any) => rel.referencia === data.idRelacionado);
182+
const index = this.paciente.relaciones.findIndex((rel: any) => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === data.idRelacionado);
211183
if (index >= 0) {
212184
if (data.operacion === 'edit') {
213185
// se muestra en panel principal para su edicion

src/app/core/mpi/components/relaciones-pacientes.html

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,28 @@
2020
<plex-list *ngIf="relacionEntrante.length">
2121
<plex-item *ngFor="let unaRel of relacionEntrante" class="">
2222
<!-- caso paciente relacionado -->
23-
<img *ngIf="unaRel.referencia" [ngClass]="{'img-fallecido' : unaRel.fechaFallecimiento}"
24-
[mpiFotoPaciente]="{id: unaRel.referencia, fotoId: unaRel.fotoId}">
23+
<img *ngIf="unaRel.referencia"
24+
[ngClass]="{'img-fallecido' : unaRel.fechaFallecimiento || unaRel.referencia?.fechaFallecimiento}"
25+
[mpiFotoPaciente]="{id: unaRel.referencia?.id || unaRel.referencia, fotoId: unaRel.fotoId || unaRel.referencia?.fotoId}">
2526
<!-- caso paciente aun no relacionado -->
2627
<img *ngIf="!unaRel.referencia && unaRel.id && unaRel.fotoId"
2728
[ngClass]="{'img-fallecido' : unaRel.fechaFallecimiento}"
2829
[mpiFotoPaciente]="{id: unaRel.id, fotoId: unaRel.fotoId}" alt="">
2930

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

33-
<plex-label *ngIf="unaRel.fechaNacimiento" titulo="{{ unaRel | edad }}"
34-
subtitulo="{{ (unaRel.fechaNacimiento | fecha:'utc') || 'Desconocida' }}">
35+
<plex-label *ngIf="unaRel.fechaNacimiento || unaRel.referencia?.fechaNacimiento"
36+
titulo="{{ (unaRel.fechaNacimiento || unaRel.referencia?.fechaNacimiento) | edad }}"
37+
subtitulo="{{ (unaRel.fechaNacimiento || unaRel.referencia?.fechaNacimiento | fecha:'utc') || 'Desconocida' }}">
3538
</plex-label>
3639

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

4347
<!-- Se muestra con un 'OR' porque no todas las relaciones guardan el genero -->

src/app/core/mpi/interfaces/IPaciente.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export interface IPaciente {
3232
fotoId: string;
3333
foto: string;
3434
createdBy: ICreatedBy;
35-
relaciones: [IPacienteRelacion];
35+
relaciones: IPacienteRelacion[];
3636

3737
financiador: [{
3838
codigoPuco: Number;

src/app/modules/mpi/components/paciente-panel.component.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,12 @@ export class PacientePanelComponent {
5555
}
5656

5757
public editRelacion(relacion: any) {
58-
this.changeRelacion.emit({ operacion: 'edit', idRelacionado: relacion.referencia });
58+
const idRelacionado = relacion.referencia?.id || relacion.referencia?._id || relacion.referencia;
59+
this.changeRelacion.emit({ operacion: 'edit', idRelacionado });
5960
}
6061

6162
public removeRelacion(relacion: any) {
62-
this.changeRelacion.emit({ operacion: 'remove', idRelacionado: relacion.referencia });
63+
const idRelacionado = relacion.referencia?.id || relacion.referencia?._id || relacion.referencia;
64+
this.changeRelacion.emit({ operacion: 'remove', idRelacionado });
6365
}
6466
}

0 commit comments

Comments
 (0)