Commit 2e8b221a authored by Gabriel's avatar Gabriel

Agrega opcion para mostrar mas medicos encontrados

parent c09cf0a0
......@@ -6,8 +6,9 @@ const is = require('./endpoints/is.js')
let LINK_SOLICITAR_ACCESO_POR_EMAIL = 'https://www.integrandosalud.com/es-ar/integrando-pacientes-solicitar-acceso-por-email/';
let OPTIONS = 4;
let VER_MAS_PROVINCIAS_ID = '99';
let VER_MAS_OPTION_ID = '99';
let MOSTRANDO_PROVINCIAS_HASTA_KEY = 'mostrando_provincias_hasta'
let MOSTRANDO_MEDICOS_ESPECIALIDAD_HASTA_KEY = 'mostrando_medicos_hasta'
let ID_PROVINCIA = 'id_provincia'
let ID_AGENDA = 'id_agenda'
let ID_PERSONA_INSTITUCIONAL = 'id_persona_institucional'
......@@ -16,6 +17,7 @@ let NOMBRE_MEDICO_INPUT = 'nombre_medico_input'
let NOMBRE_MEDICO = 'nombre_medico'
let SIGUIENTE_PASO = 'siguiente_paso'
let MEDICOS = 'medicos'
let MEDICOS_ESPECIALIDAD = 'medicos_especialidad'
let TURNOS_DISPONIBLES = 'turnos_disponibles'
let TURNO_ELEGIDO = 'turno_elegido'
......@@ -25,10 +27,10 @@ let FECHA_NACIMIENTO = 'fecha_nacimiento'
let SEXO = 'sexo'
let CORREO = 'correo'
function getDesde(userData) {
function getMostrandoDesde(userData, hastaKey) {
let desde = 0;
if (userData[MOSTRANDO_PROVINCIAS_HASTA_KEY] != null) {
desde = userData[MOSTRANDO_PROVINCIAS_HASTA_KEY];
if (userData[hastaKey] != null) {
desde = userData[hastaKey];
}
return desde;
}
......@@ -36,20 +38,58 @@ function getDesde(userData) {
async function getSiguientesProvinciasMostrar(userData) {
let provincias = await is.getProvincias();
let choices = [];
let desde = getDesde(userData);
let desde = getMostrandoDesde(userData, MOSTRANDO_PROVINCIAS_HASTA_KEY);
let iter = desde;
for (iter; iter < desde + OPTIONS && iter < provincias.length; iter++) { //TODO: limite de 5 (provincias.length)
for (iter; iter < desde + OPTIONS && iter < provincias.length; iter++) {
choices.push(utils.armarChoice(provincias[iter].id_provincia, provincias[iter].descripcion));
}
if(iter !== provincias.length){
choices.push(utils.armarChoice(VER_MAS_PROVINCIAS_ID, 'Ver más provincias'));
choices.push(utils.armarChoice(VER_MAS_OPTION_ID, 'Ver más provincias'));
}
return choices;
}
function updateProvinciasMostradas(userData) {
let desde = getDesde(userData);
userData[MOSTRANDO_PROVINCIAS_HASTA_KEY] = desde + OPTIONS;
async function getSiguientesMedicosMostrar(userData){
let medicos_especialidad = [];
if(userData[MEDICOS_ESPECIALIDAD] != null){
medicos_especialidad = userData[MEDICOS_ESPECIALIDAD];
} else{
let medicos = userData[MEDICOS];
for(let i=0; i<medicos.length; i++){
//Por cada medico, obtenemos su especialidad
let id_persona_institucional = medicos[i].id_persona_institucional;
let medico_especialidades = await is.getEspecialidadesMedico(id_persona_institucional, userData[ID_PROVINCIA]);
//Y agrupamos los datos del medico
for(let j=0; medico_especialidades != null && j<medico_especialidades.length; j++){
let medico = medicos[i];
medico.especialidad = medico_especialidades[j].especialidad;
medico.agendaId = medico_especialidades[j].agendaId;
medicos_especialidad.push(medico);
}
}
userData[MEDICOS_ESPECIALIDAD] = medicos_especialidad;
}
let desde = getMostrandoDesde(userData, MOSTRANDO_MEDICOS_ESPECIALIDAD_HASTA_KEY);
//Armamos picker
let choices = [];
let iter = desde;
for(iter; iter < desde + OPTIONS && iter < medicos_especialidad.length; iter++){
let medico_especialidad = `${medicos_especialidad[iter].nombre} - Especialidad: ${medicos_especialidad[iter].especialidad}`;
choices.push(utils.armarChoice(medicos_especialidad[iter].agendaId.toString(), medico_especialidad));
}
if(iter !== medicos_especialidad.length){
choices.push(utils.armarChoice(VER_MAS_OPTION_ID, 'Ver más'));
}
return choices;
}
function updateChoicesMostradas(userData, hastaKey) {
let desde = getMostrandoDesde(userData, hastaKey);
userData[hastaKey] = desde + OPTIONS;
return userData;
}
......@@ -81,7 +121,7 @@ module.exports =
ask_provincia: async function (message, userData, website_id, session_id) {
if (message.content.choices[0].selected === true) {
let choices = await getSiguientesProvinciasMostrar(userData);
userData = updateProvinciasMostradas(userData);
userData = updateChoicesMostradas(userData, MOSTRANDO_PROVINCIAS_HASTA_KEY);
await crisp.setSiguientePaso(website_id, session_id, pasos.RESP_PROVINCIA, userData);
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_PROVINCIA, "Selecciona tu provincia", choices);
} else {
......@@ -89,20 +129,17 @@ module.exports =
}
},
resp_provincia: async function (message, userData, website_id, session_id) {
for (let i = 0; i < message.content.choices.length; i++) {
if (message.content.choices[i].selected === true) {
if (message.content.choices[i].value === VER_MAS_PROVINCIAS_ID) {
//Ver mas provincias
let choices = await getSiguientesProvinciasMostrar(userData);
userData = updateProvinciasMostradas(userData);
await crisp.setSiguientePaso(website_id, session_id, pasos.RESP_PROVINCIA, userData);
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_PROVINCIA, "Selecciona tu provincia", choices);
} else {
//Set provincia y avanzar
userData[ID_PROVINCIA] = message.content.choices[i].value;
await this.ask_nombre_medico(message, userData, website_id, session_id);
}
}
let choiceElegida = getChoiceElegida(message);
if (choiceElegida.value === VER_MAS_OPTION_ID) {
//Ver mas provincias
let choices = await getSiguientesProvinciasMostrar(userData);
userData = updateChoicesMostradas(userData, MOSTRANDO_PROVINCIAS_HASTA_KEY);
await crisp.setSiguientePaso(website_id, session_id, pasos.RESP_PROVINCIA, userData);
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_PROVINCIA, "Selecciona tu provincia", choices);
} else {
//Set provincia y avanzar
userData[ID_PROVINCIA] = choiceElegida.value;
await this.ask_nombre_medico(message, userData, website_id, session_id);
}
},
ask_nombre_medico: async function(message, userData, website_id, session_id){
......@@ -113,44 +150,38 @@ module.exports =
resp_nombre_medico: async function(message, userData, website_id, session_id){
let nombreMedico = message.content;
userData[NOMBRE_MEDICO_INPUT] = nombreMedico;
await this.ask_medico_especialidad(message, userData, website_id, session_id);
},
ask_medico_especialidad: async function(message, userData, website_id, session_id){
let medicos = await is.getMedicosByName(userData[NOMBRE_MEDICO_INPUT], userData[ID_PROVINCIA]);
let medicos_especialidad = [];
if(medicos.length > 0){
for(let i=0; i<medicos.length; i++){
//Por cada medico, obtenemos su especialidad
let id_persona_institucional = medicos[i].id_persona_institucional;
let medico_especialidades = await is.getEspecialidadesMedico(id_persona_institucional, userData[ID_PROVINCIA]);
//Y agrupamos los datos del medico
for(let j=0; medico_especialidades != null && j<medico_especialidades.length; j++){
let medico = medicos[i];
medico.especialidad = medico_especialidades[j].especialidad;
medico.agendaId = medico_especialidades[j].agendaId;
medicos_especialidad.push(medico);
}
}
userData[MEDICOS] = medicos;
await crisp.updateUserData(website_id, session_id, userData);
await this.ask_medico_especialidad(message, userData, website_id, session_id);
}
userData[MEDICOS_ESPECIALIDAD] = JSON.stringify(medicos_especialidad);
//Armamos picker
choices = [];
for(let i=0; i<medicos_especialidad.length && i < 5; i++){
let medico_especialidad = `${medicos_especialidad[i].nombre} - Especialidad: ${medicos_especialidad[i].especialidad}`;
choices.push(utils.armarChoice(medicos_especialidad[i].agendaId.toString(), medico_especialidad));
else{
await crisp.sendTextMessage(website_id, session_id,`No encuentro médicos con el nombre ${nombreMedico} en la provincia`);
await crisp.sendTextMessage(website_id, session_id, "Por favor, reintente ingresar el nombre");
await crisp.sendTextMessage(website_id, session_id,"¿Cómo se llama el médico?");
}
//TODO: agregar 'Mostrar mas'
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_MEDICO_ESPECIALIDAD, "Seleccione uno de los médico encontrados, según su especialidad", choices);
},
ask_medico_especialidad: async function(message, userData, website_id, session_id){
let choices = await getSiguientesMedicosMostrar(userData);
userData = updateChoicesMostradas(userData, MOSTRANDO_MEDICOS_ESPECIALIDAD_HASTA_KEY);
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_MEDICO_ESPECIALIDAD, "Seleccione uno de los médicos encontrados, según su especialidad", choices);
await crisp.setSiguientePaso(website_id, session_id, pasos.RESP_MEDICO_ESPECIALIDAD, userData);
},
resp_medico_especialidad: async function(message, userData, website_id, session_id){
for (let i = 0; i < message.content.choices.length; i++) {
if (message.content.choices[i].selected === true) {
userData[ID_AGENDA] = parseInt(message.content.choices[i].value);
userData[NOMBRE_MEDICO] = message.content.choices[i].label.split(' -')[0]; //Quitamos la especialidad
await this.ask_fecha_turno(message, userData, website_id, session_id);
}
let choiceElegida = getChoiceElegida(message);
if(choiceElegida.value === VER_MAS_OPTION_ID){
//Mostrar mas medicos
let choices = await getSiguientesMedicosMostrar(userData);
userData = updateChoicesMostradas(userData, MOSTRANDO_MEDICOS_ESPECIALIDAD_HASTA_KEY);
await crisp.updateUserData(website_id, session_id, userData)
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_MEDICO_ESPECIALIDAD, "Seleccione uno de los médicos encontrados, según su especialidad", choices);
}
else{
//Set medico-especialidad y avanzar
userData[ID_AGENDA] = parseInt(choiceElegida.value);
userData[NOMBRE_MEDICO] = choiceElegida.label.split(' -')[0]; //Quitamos la especialidad
await this.ask_fecha_turno(message, userData, website_id, session_id);
}
},
ask_fecha_turno: async function(message, userData, website_id, session_id){
......@@ -159,7 +190,7 @@ module.exports =
},
resp_fecha_turno: async function(message, userData, website_id, session_id){
userData[FECHA_TURNO] = message.content;
let medicos_especialidad = JSON.parse(userData[MEDICOS_ESPECIALIDAD]);
let medicos_especialidad = userData[MEDICOS_ESPECIALIDAD];
for(let i=0; i<medicos_especialidad.length; i++){
if(medicos_especialidad[i].agendaId === userData[ID_AGENDA]){
userData[ID_PERSONA_INSTITUCIONAL] = medicos_especialidad[i].id_persona_institucional;
......@@ -174,7 +205,7 @@ module.exports =
choices.push(utils.armarChoice(i.toString(), turnos[i].fechaHora));
}
//TODO: agregar 'Mostrar mas'
userData[TURNOS_DISPONIBLES] = JSON.stringify(turnos);
userData[TURNOS_DISPONIBLES] = turnos;
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_HORA_TURNO, "Seleccione un turno", choices);
await crisp.setSiguientePaso(website_id, session_id, pasos.RESP_HORA_TURNO, userData);
},
......@@ -187,7 +218,7 @@ module.exports =
turno = turnosDisponibles[i];
}
}
userData[TURNO_ELEGIDO] = JSON.stringify(turno);
userData[TURNO_ELEGIDO] = turno;
await this.ask_tipo_documento(message, userData, website_id, session_id);
},
ask_tipo_documento: async function(message, userData, website_id, session_id){
......@@ -246,7 +277,7 @@ module.exports =
await crisp.sendTextMessage(website_id, session_id, LINK_SOLICITAR_ACCESO_POR_EMAIL);
return;
}
let turnoElegido = JSON.parse(userData[TURNO_ELEGIDO]);
let turnoElegido = userData[TURNO_ELEGIDO];
let resp = await is.crearTurno(userData[TIPO_DOCUMENTO], userData[NUMERO_DOCUMENTO], toFechaUsa(userData[FECHA_NACIMIENTO]),
userData[SEXO], userData[CORREO], 0, turnoElegido.horarioId, turnoElegido.fechaHora);
if(resp.success === true){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment