Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CIT - Notificaciones: limpiar código innecesario #3117

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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
65 changes: 0 additions & 65 deletions src/app/components/turnos/dar-turnos/dar-turnos.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,11 @@ import { ProfesionalService } from '../../../services/profesional.service';
import { AgendaService } from '../../../services/turnos/agenda.service';
import { ListaEsperaService } from '../../../services/turnos/listaEspera.service';
import { idCMI } from '../constantes';
import { environment } from './../../../../environments/environment';
import { IAgenda } from './../../../interfaces/turnos/IAgenda';
// Interfaces
import { IBloque } from './../../../interfaces/turnos/IBloque';
import { ITurno } from './../../../interfaces/turnos/ITurno';
import { ObraSocialService } from './../../../services/obraSocial.service';
import { SmsService } from './../../../services/turnos/sms.service';
import { TurnoService } from './../../../services/turnos/turno.service';
import { EstadosAgenda } from './../enums';
import { CalendarioDia } from './calendario-dia.class';
Expand Down Expand Up @@ -208,7 +206,6 @@ export class DarTurnosComponent implements OnInit {
public conceptosTurneablesService: ConceptosTurneablesService,
public servicioPrestacionPaciente: PrestacionesService,
public servicioOS: ObraSocialService,
public smsService: SmsService,
public plex: Plex,
public auth: Auth,
private router: Router,
Expand Down Expand Up @@ -1095,9 +1092,6 @@ export class DarTurnosComponent implements OnInit {
}

private afterSaveTurno(datosTurno) {
if (!this.agenda.dinamica && this.agenda.enviarSms) {
this.enviarSMS(datosTurno.paciente);
}
this.estadoT = 'noSeleccionada';
const agendaReturn = this.agenda; // agendaReturn será devuelta al gestor.
let turnoSiguiente = null;
Expand Down Expand Up @@ -1156,65 +1150,6 @@ export class DarTurnosComponent implements OnInit {
this.turnoTipoPrestacion = undefined; // blanquea el select de tipoPrestacion
}

enviarSMS(paciente: any) {
// Enviar SMS sólo en Producción
if (environment.production === true && paciente.telefono) {
const dia = moment(this.turno.horaInicio).format('DD/MMM');
const horario = moment(this.turno.horaInicio).format('HH:mm');
// Inicial del nombre. más Apellidos (Max 20 caracteres)
const nombrePaciente = (paciente.alias || paciente.nombre).substr(0, 1) + '. ' + this.paciente.apellido.substr(0, 20);
// Max 30 caracteres
const prestacion = this.turnoTipoPrestacion.term.substr(0, 30);
let nombreOrganizacion = this.agenda.organizacion.nombre.toLocaleLowerCase();
// Se reemplazan nombres de organización por abreviaturas
if (nombreOrganizacion.indexOf('hospital') !== -1) {
nombreOrganizacion = nombreOrganizacion.replace('hospital', 'HOSP');
} else if (nombreOrganizacion.indexOf('centro de salud') !== -1) {
nombreOrganizacion = nombreOrganizacion.replace('centro de salud', 'CS');
} else if (nombreOrganizacion.indexOf('puesto sanitario') !== -1) {
nombreOrganizacion = nombreOrganizacion.replace('puesto sanitario', 'PS');
}
// Cortar del guion "-" en adelante
// Max 30 caracteres
if (nombreOrganizacion.indexOf('-') !== -1) {
nombreOrganizacion = nombreOrganizacion.substr(0, nombreOrganizacion.indexOf('-'));
nombreOrganizacion = nombreOrganizacion.substring(0, 30);
}

let mensaje = 'Confirmación turno ' + nombrePaciente + ' | ' + dia + ' | ' + horario + 'Hs | ' + prestacion + ' | ' + nombreOrganizacion;
// Palabra consultorio -> consult. (Max 30 caracteres)
if (this.agenda.espacioFisico) {
const consultorioNombre = this.agenda.espacioFisico.nombre.toLocaleLowerCase().replace('consultorio', 'consult.');
mensaje = mensaje + ' | ' + consultorioNombre.substr(0, 30);
}
const smsParams = {
telefono: paciente.telefono,
mensaje: mensaje.toLocaleUpperCase(),
};
this.smsService.enviarSms(smsParams).subscribe({
next: (sms) => {
this.resultado = sms;
if (this.resultado === '0') {
if (paciente.alias) {
this.plex.toast('info', 'Se notificó al paciente ' + paciente.alias + ' ' + paciente.apellido);
} else {
this.plex.toast('info', 'Se notificó al paciente ' + paciente.nombre + ' ' + paciente.apellido);
}
} else {
this.plex.toast('danger', 'ERROR: Notificación no enviada');
}
},
error: (err) => {
if (err) {
this.plex.toast('danger', 'Error de servicio');
}
}
});
} else {
this.plex.toast('info', 'INFO: Notificación no enviada (activa sólo en Producción)');
}
}

tieneTurnos(bloque: IBloque): boolean {
const turnos = bloque.turnos;
if (!this.desdeDemanda && (this.tipoTurno === 'gestion' || this.agenda.condicionLlave)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { Plex } from '@andes/plex';
import { IAgenda } from './../../../../interfaces/turnos/IAgenda';
import { EstadosAgenda } from './../../enums';
import { AgendaService } from '../../../../services/turnos/agenda.service';
import { environment } from './../../../../../environments/environment';
import { SmsService } from './../../../../services/turnos/sms.service';
import { TurnoService } from './../../../../services/turnos/turno.service';
import { Auth } from '@andes/auth';
Expand Down Expand Up @@ -144,20 +143,13 @@ export class SuspenderAgendaComponent implements OnInit {
this.returnSuspenderAgenda.emit(null);
}


notificar() {
// Se envían notificaciones sólo en Producción
if (environment.production === true) {
for (let x = 0; x < this.seleccionadosSMS.length; x++) {
if (this.seleccionadosSMS[x].avisoSuspension !== 'enviado') {
this.seleccionadosSMS[x].smsEnviado = 'pendiente';
this.send(this.seleccionadosSMS[x]);
}
for (let x = 0; x < this.seleccionadosSMS.length; x++) {
if (this.seleccionadosSMS[x].avisoSuspension !== 'enviado') {
this.seleccionadosSMS[x].smsEnviado = 'pendiente';
this.send(this.seleccionadosSMS[x]);
}
} else {
this.plex.toast('info', 'INFO: Notificación no enviada (activa sólo en Producción)');
}

}

send(turno: any) {
Expand All @@ -168,7 +160,6 @@ export class SuspenderAgendaComponent implements OnInit {
evento: 'notificaciones:turno:suspender',
dto: turno
};

let idBloque;
this.agenda.bloques.forEach(element => {
const indice = element.turnos.findIndex(t => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { environment } from './../../../../../../environments/environment';
import { Component, Input, EventEmitter, Output, OnInit, ViewChild } from '@angular/core';
import { Plex } from '@andes/plex';
import { Auth } from '@andes/auth';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import * as moment from 'moment';
import { AgendaService } from '../../../../../services/turnos/agenda.service';
import { SmsService } from '../../../../../services/turnos/sms.service';
import { TurnoService } from '../../../../../services/turnos/turno.service';
import { environment } from './../../../../../../environments/environment';
import { IAgenda } from './../../../../../interfaces/turnos/IAgenda';
import { ITurno } from './../../../../../interfaces/turnos/ITurno';

Expand Down Expand Up @@ -217,54 +216,14 @@ export class ReasignarTurnoAutomaticoComponent implements OnInit {

this.serviceTurno.put(reasignacion).subscribe(resultado2 => {
this.plex.toast('success', 'El turno se reasignó correctamente');
// Se envían SMS sólo en Producción
this.actualizar();
if (environment.production === true) {
const dia = moment(turnoReasignado.horaInicio).format('DD/MM/YYYY');
const horario = moment(turnoReasignado.horaInicio).format('HH:mm');
const mensaje = 'Le informamos que su turno fue reasignado al ' + dia + ' a las ' + horario + '.';
this.enviarSMS(turnoReasignado.paciente, mensaje);
} else {
this.plex.toast('info', 'INFO: SMS no enviado (activo sólo en Producción)');
}
});

});
});

}

enviarSMS(paciente: any, mensaje) {
if (!paciente.telefono) {
return;
}
const smsParams = {
telefono: paciente.telefono,
mensaje: mensaje,
};
this.smsService.enviarSms(smsParams).subscribe(
sms => {
this.resultado = sms;

// "if 0 errores"
if (this.resultado === '0') {
if (paciente.alias) {
this.plex.toast('info', 'Se notificó al paciente ' + paciente.alias + ' ' + paciente.apellido);
} else {
this.plex.toast('info', 'Se notificó al paciente ' + paciente.nombre + ' ' + paciente.apellido);
}
} else {
this.plex.toast('danger', 'ERROR: Notificación no enviada');
}
},
err => {
if (err) {
this.plex.toast('danger', 'Error de servicio');

}
});
}

ocultarAgendaCandidata(idAgenda, indice) {

if (this.agendasOcultas.indexOf(idAgenda) > -1) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { environment } from './../../../../../environments/environment';
import * as moment from 'moment';
import { Component, Input, EventEmitter, Output, OnInit } from '@angular/core';
import { Plex } from '@andes/plex';
import { IAgenda } from './../../../../interfaces/turnos/IAgenda';
import { ITurno } from './../../../../interfaces/turnos/ITurno';
import { ListaEsperaService } from '../../../../services/turnos/listaEspera.service';
import { AgendaService } from '../../../../services/turnos/agenda.service';
import { TurnoService } from './../../../../services/turnos/turno.service';
import { SmsService } from './../../../../services/turnos/sms.service';
import { Auth } from '@andes/auth';

Expand Down Expand Up @@ -37,7 +36,14 @@ export class SuspenderTurnoComponent implements OnInit {
public avisoSuspension = 'no enviado';
public suspendio = false;

constructor(public plex: Plex, public auth: Auth, public listaEsperaService: ListaEsperaService, public serviceAgenda: AgendaService, public smsService: SmsService) { }
constructor(
public plex: Plex,
public auth: Auth,
public listaEsperaService: ListaEsperaService,
public serviceAgenda: AgendaService,
public smsService: SmsService,
public turnosService: TurnoService
) { }

ngOnInit() {

Expand Down Expand Up @@ -127,13 +133,8 @@ export class SuspenderTurnoComponent implements OnInit {
this.suspendio = true;
this.saveSuspenderTurno.emit(this.agenda);

// Se envían notificación sólo en Producción
if (environment.production === true) {
for (let x = 0; x < this.seleccionadosSMS.length; x++) {
this.enviarNotificacion(this.seleccionadosSMS[x]);
}
} else {
this.plex.toast('info', 'INFO: notificacion no enviado (activo sólo en Producción)');
for (let x = 0; x < this.seleccionadosSMS.length; x++) {
this.enviarNotificacion(this.seleccionadosSMS[x]);
}
},
);
Expand All @@ -159,18 +160,14 @@ export class SuspenderTurnoComponent implements OnInit {

this.plex.info('warning', 'Los pacientes seleccionados pasaron a Lista de Espera');

// this.enviarSMS(this.turnos[x], 'Su turno fue cancelado, queda en lista de espera');

});
});
}
}

reasignarTurno(paciente: any) {
this.reasignar = { 'paciente': paciente.paciente, 'idTurno': paciente.id, 'idAgenda': this.agenda.id };

this.suspenderTurno();

this.reasignarTurnoSuspendido.emit(this.reasignar);
}

Expand All @@ -182,7 +179,25 @@ export class SuspenderTurnoComponent implements OnInit {
evento: 'notificaciones:turno:suspender',
dto: turno
};
this.smsService.enviarNotificacion(params).subscribe(resultado => { });
let idBloque;
this.agenda.bloques.forEach(element => {
const indice = element.turnos.findIndex(t => {
return (t.id === turno.id);
});
idBloque = (indice !== -1) ? element.id : -1;
});
this.smsService.enviarNotificacion(params).subscribe((msg: any) => {
const aviso = msg.resultado === 1 ? 'enviado' : 'fallido';
const data = {
idAgenda: this.agenda.id,
idBloque: idBloque,
idTurno: turno.id,
avisoSuspension: aviso
};
this.turnosService.patch(this.agenda.id, idBloque, turno.id, data).subscribe(resultado => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuanIRamirez Veo en esta linea dos subscribe anidados, lo que resulta mala practica porque permite la fuga de memoria y dificultad para el manejo de errores. En su lugar se puede optar por pipe + switchMap o similar

turno.avisoSuspension = aviso;
});
});
}

cancelar() {
Expand Down
39 changes: 0 additions & 39 deletions src/app/components/turnos/gestor-agendas/turnos.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -337,48 +337,9 @@ export class TurnosComponent implements OnInit {
this.listaEsperaService.postXIdAgenda(agenda.id, patch).subscribe(resultado => {
this.agenda = resultado;
this.plex.info('warning', 'El paciente pasó a Lista de Espera');
// this.enviarSMS();
});
}

enviarSMS() {
let turno;
for (let x = 0; x < this.turnosSeleccionados.length; x++) {
const idTurno = this.turnosSeleccionados[x].id;
this.turnos.filter((el, index, arr) => {
if (el.id === idTurno) {
turno = el;
}
});

turno.smsVisible = true;
turno.smsLoader = true;
if (!this.turnosSeleccionados[x].paciente || !this.turnosSeleccionados[x].paciente.telefono) {
return;
}

// Siempre chequear que exista el id de paciente, porque puede haber una key "paciente" vacía
if (this.turnosSeleccionados[x].paciente && this.turnosSeleccionados[x].paciente.id) {

this.smsService.enviarSms(this.turnosSeleccionados[x].paciente.telefono).subscribe({
next: resultado => {
turno = this.turnosSeleccionados[x];
if (resultado === '0') {
turno.smsEnviado = true;
turno.smsNoEnviado = false;
turno.smsLoader = false;
} else {
turno.smsEnviado = false;
turno.smsNoEnviado = true;
turno.smsLoader = false;
}
},
error: () => this.plex.toast('error', 'Error al enviar SMS.')
});
}
}
}

cambiarADisponible() {
this.plex.confirm('¿Está seguro que quiere pasar el/los turno/s a disponible?', 'Turno disponible').then(respuesta => {
if (respuesta) {
Expand Down
8 changes: 0 additions & 8 deletions src/app/components/turnos/gestor-agendas/turnos.html
Original file line number Diff line number Diff line change
Expand Up @@ -222,10 +222,6 @@ <h2 class="text-info">
(cancelarCarpetaEmit)="afterComponenteCarpeta($event)">
</carpeta-paciente>
</plex-help>
<plex-button *ngIf="botones.sms && turnosSeleccionados[0]?.id === turno.id"
ariaLabel="Enviar un mensaje al paciente" size="sm" type="info" icon="email-outline"
(click)="enviarSMS()" tooltip="Enviar un mensaje al paciente" tooltipPosition="top">
</plex-button>
<plex-help *ngIf="botones.liberar && turnosSeleccionados[0]?.id === turno.id"
class="help-liberar-turnos" type="info" btnType="danger" icon="account-off"
tooltip="Liberar turnos" tooltipPosition="left">
Expand Down Expand Up @@ -310,10 +306,6 @@ <h2 class="text-info">
(cancelarCarpetaEmit)="afterComponenteCarpeta($event)">
</carpeta-paciente>
</plex-help>
<plex-button *ngIf="botones.sms && turnosSeleccionados[0]?.id === sobreturno.id"
ariaLabel="Enviar un mensaje al paciente" size="sm" type="info" icon="email-outline"
(click)="enviarSMS()" tooltip="Enviar un mensaje al paciente" tooltipPosition="top">
</plex-button>
<plex-help *ngIf="botones.liberar && turnosSeleccionados[0]?.id === sobreturno.id"
class="help-liberar-turnos" type="info" btnType="danger" icon="account-off"
tooltip="Liberar turnos" tooltipPosition="left">
Expand Down
1 change: 0 additions & 1 deletion src/app/services/turnos/sms.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { Observable } from 'rxjs';
import { Injectable } from '@angular/core';
import { Server } from '@andes/shared';
import { environment } from '../../../environments/environment';

@Injectable()
export class SmsService {
Expand Down