Skip to content

Commit 16ee2d9

Browse files
committed
feat(MONIT-87):"Agregar advertencia en edicion de elementos rup"
1 parent ef3ccbb commit 16ee2d9

1 file changed

Lines changed: 49 additions & 11 deletions

File tree

src/app/rupers/components/molecula-create-update/molecula-create-update.component.ts

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable no-console */
12
import { Component, OnInit } from '@angular/core';
23
import { ActivatedRoute, Router } from '@angular/router';
34
import { SnomedService } from 'src/app/shared/snomed.service';
@@ -139,34 +140,71 @@ export class RUPMoleculaCreateUpdateComponent implements OnInit {
139140
}
140141
onSave() {
141142
this.elemento.nombre = this.nombre;
142-
this.elemento.conceptos = [...this.conceptos];
143-
const conceptosIds = this.conceptos.map(c => String(c.conceptId));
143+
144+
const conceptosExistentesOriginales = this.elemento.conceptos || [];
145+
const conceptosSeleccionadosAhora = this.conceptos || [];
146+
147+
const conceptosNuevosAAgregar = conceptosSeleccionadosAhora.filter(
148+
nc => !conceptosExistentesOriginales.some(ec => String(ec.conceptId) === String(nc.conceptId))
149+
);
150+
151+
const conceptosUnicos = [
152+
...conceptosExistentesOriginales,
153+
...conceptosNuevosAAgregar
154+
];
155+
156+
if (conceptosUnicos.length === 0) {
157+
this.plex.toast('danger', 'La molécula debe tener al menos un concepto.');
158+
return;
159+
}
160+
161+
this.elemento.conceptos = conceptosUnicos;
162+
const conceptosIdsNuevos = conceptosNuevosAAgregar.map(c => String(c.conceptId));
163+
164+
if (conceptosIdsNuevos.length === 0) {
165+
this.guardarMolecula();
166+
return;
167+
}
168+
144169
const conceptoDuplicado = this.elementosRup
145170
.filter(e => e.id !== this.id)
146171
.map(e => e.conceptos || [])
147172
.reduce((acc, val) => acc.concat(val), [])
148-
.find(c => conceptosIds.includes(String(c.conceptId)));
173+
.find(c => conceptosIdsNuevos.includes(String(c.conceptId)));
149174

150175
if (conceptoDuplicado) {
151-
this.plex.toast(
152-
'danger',
153-
`El concepto "${conceptoDuplicado.term}" ya existe en otra molécula`
154-
);
176+
const rupersDuplicados = this.elementosRup
177+
.filter(e => e.id !== this.id && (e.conceptos || []).some(c => String(c.conceptId) === String(conceptoDuplicado.conceptId)));
178+
const nombresRuper = rupersDuplicados.map(e => `<b>${e.nombre}</b>`).join('; ') || 'desconocido';
179+
180+
this.plex.confirm(
181+
`⚠️ El concepto "${conceptoDuplicado.fsn}" ya existe en los Ruper: ${nombresRuper}.<br>¿Deseás igualmente agregarlo aquí?`,
182+
'Concepto duplicado'
183+
).then(confirmado => {
184+
if (confirmado) {
185+
this.guardarMolecula();
186+
} else {
187+
this.plex.toast('info', 'Operación cancelada por el usuario');
188+
}
189+
});
155190
return;
156191
}
157-
// Guardá la molécula completa (incluye todos los requeridos y sus params actualizados)
192+
193+
this.guardarMolecula();
194+
}
195+
guardarMolecula() {
158196
this.elementosRUPService.save(this.elemento).subscribe(
159197
() => {
160198
this.plex.toast('success', 'Molécula guardada correctamente');
161-
this.router.navigate(['/rupers/elementos-rup'], { replaceUrl: true }); // 👈 redirige como antes
162-
199+
this.router.navigate(['/rupers/elementos-rup'], { replaceUrl: true });
163200
},
164201
(err) => {
165202
this.plex.toast('danger', 'Error al guardar la molécula');
203+
// 👇 Mostrá el error si ocurre
204+
console.error('Error al guardar:', err);
166205
}
167206
);
168207
}
169-
170208
volver() {
171209
this.router.navigate(['/rupers/elementos-rup'], { replaceUrl: true });
172210
}

0 commit comments

Comments
 (0)