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') ...@@ -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 LINK_SOLICITAR_ACCESO_POR_EMAIL = 'https://www.integrandosalud.com/es-ar/integrando-pacientes-solicitar-acceso-por-email/';
let OPTIONS = 4; 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_PROVINCIAS_HASTA_KEY = 'mostrando_provincias_hasta'
let MOSTRANDO_MEDICOS_ESPECIALIDAD_HASTA_KEY = 'mostrando_medicos_hasta'
let ID_PROVINCIA = 'id_provincia' let ID_PROVINCIA = 'id_provincia'
let ID_AGENDA = 'id_agenda' let ID_AGENDA = 'id_agenda'
let ID_PERSONA_INSTITUCIONAL = 'id_persona_institucional' let ID_PERSONA_INSTITUCIONAL = 'id_persona_institucional'
...@@ -16,6 +17,7 @@ let NOMBRE_MEDICO_INPUT = 'nombre_medico_input' ...@@ -16,6 +17,7 @@ let NOMBRE_MEDICO_INPUT = 'nombre_medico_input'
let NOMBRE_MEDICO = 'nombre_medico' let NOMBRE_MEDICO = 'nombre_medico'
let SIGUIENTE_PASO = 'siguiente_paso' let SIGUIENTE_PASO = 'siguiente_paso'
let MEDICOS = 'medicos'
let MEDICOS_ESPECIALIDAD = 'medicos_especialidad' let MEDICOS_ESPECIALIDAD = 'medicos_especialidad'
let TURNOS_DISPONIBLES = 'turnos_disponibles' let TURNOS_DISPONIBLES = 'turnos_disponibles'
let TURNO_ELEGIDO = 'turno_elegido' let TURNO_ELEGIDO = 'turno_elegido'
...@@ -25,10 +27,10 @@ let FECHA_NACIMIENTO = 'fecha_nacimiento' ...@@ -25,10 +27,10 @@ let FECHA_NACIMIENTO = 'fecha_nacimiento'
let SEXO = 'sexo' let SEXO = 'sexo'
let CORREO = 'correo' let CORREO = 'correo'
function getDesde(userData) { function getMostrandoDesde(userData, hastaKey) {
let desde = 0; let desde = 0;
if (userData[MOSTRANDO_PROVINCIAS_HASTA_KEY] != null) { if (userData[hastaKey] != null) {
desde = userData[MOSTRANDO_PROVINCIAS_HASTA_KEY]; desde = userData[hastaKey];
} }
return desde; return desde;
} }
...@@ -36,20 +38,58 @@ function getDesde(userData) { ...@@ -36,20 +38,58 @@ function getDesde(userData) {
async function getSiguientesProvinciasMostrar(userData) { async function getSiguientesProvinciasMostrar(userData) {
let provincias = await is.getProvincias(); let provincias = await is.getProvincias();
let choices = []; let choices = [];
let desde = getDesde(userData); let desde = getMostrandoDesde(userData, MOSTRANDO_PROVINCIAS_HASTA_KEY);
let iter = desde; 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)); choices.push(utils.armarChoice(provincias[iter].id_provincia, provincias[iter].descripcion));
} }
if(iter !== provincias.length){ 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; return choices;
} }
function updateProvinciasMostradas(userData) { async function getSiguientesMedicosMostrar(userData){
let desde = getDesde(userData); let medicos_especialidad = [];
userData[MOSTRANDO_PROVINCIAS_HASTA_KEY] = desde + OPTIONS; 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; return userData;
} }
...@@ -81,7 +121,7 @@ module.exports = ...@@ -81,7 +121,7 @@ module.exports =
ask_provincia: async function (message, userData, website_id, session_id) { ask_provincia: async function (message, userData, website_id, session_id) {
if (message.content.choices[0].selected === true) { if (message.content.choices[0].selected === true) {
let choices = await getSiguientesProvinciasMostrar(userData); 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.setSiguientePaso(website_id, session_id, pasos.RESP_PROVINCIA, userData);
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_PROVINCIA, "Selecciona tu provincia", choices); await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_PROVINCIA, "Selecciona tu provincia", choices);
} else { } else {
...@@ -89,21 +129,18 @@ module.exports = ...@@ -89,21 +129,18 @@ module.exports =
} }
}, },
resp_provincia: async function (message, userData, website_id, session_id) { resp_provincia: async function (message, userData, website_id, session_id) {
for (let i = 0; i < message.content.choices.length; i++) { let choiceElegida = getChoiceElegida(message);
if (message.content.choices[i].selected === true) { if (choiceElegida.value === VER_MAS_OPTION_ID) {
if (message.content.choices[i].value === VER_MAS_PROVINCIAS_ID) {
//Ver mas provincias //Ver mas provincias
let choices = await getSiguientesProvinciasMostrar(userData); 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.setSiguientePaso(website_id, session_id, pasos.RESP_PROVINCIA, userData);
await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_PROVINCIA, "Selecciona tu provincia", choices); await crisp.sendPickerMessage(website_id, session_id, pasos.RESP_PROVINCIA, "Selecciona tu provincia", choices);
} else { } else {
//Set provincia y avanzar //Set provincia y avanzar
userData[ID_PROVINCIA] = message.content.choices[i].value; userData[ID_PROVINCIA] = choiceElegida.value;
await this.ask_nombre_medico(message, userData, website_id, session_id); await this.ask_nombre_medico(message, userData, website_id, session_id);
} }
}
}
}, },
ask_nombre_medico: async function(message, userData, website_id, session_id){ ask_nombre_medico: async function(message, userData, website_id, session_id){
userData[SIGUIENTE_PASO] = pasos.RESP_NOMBRE_MEDICO; userData[SIGUIENTE_PASO] = pasos.RESP_NOMBRE_MEDICO;
...@@ -113,44 +150,38 @@ module.exports = ...@@ -113,44 +150,38 @@ module.exports =
resp_nombre_medico: async function(message, userData, website_id, session_id){ resp_nombre_medico: async function(message, userData, website_id, session_id){
let nombreMedico = message.content; let nombreMedico = message.content;
userData[NOMBRE_MEDICO_INPUT] = nombreMedico; 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 = await is.getMedicosByName(userData[NOMBRE_MEDICO_INPUT], userData[ID_PROVINCIA]);
let medicos_especialidad = [];
if(medicos.length > 0){ if(medicos.length > 0){
for(let i=0; i<medicos.length; i++){ userData[MEDICOS] = medicos;
//Por cada medico, obtenemos su especialidad await crisp.updateUserData(website_id, session_id, userData);
let id_persona_institucional = medicos[i].id_persona_institucional; await this.ask_medico_especialidad(message, userData, website_id, session_id);
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] = JSON.stringify(medicos_especialidad); else{
await crisp.sendTextMessage(website_id, session_id,`No encuentro médicos con el nombre ${nombreMedico} en la provincia`);
//Armamos picker await crisp.sendTextMessage(website_id, session_id, "Por favor, reintente ingresar el nombre");
choices = []; await crisp.sendTextMessage(website_id, session_id,"¿Cómo se llama el médico?");
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));
} }
//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); await crisp.setSiguientePaso(website_id, session_id, pasos.RESP_MEDICO_ESPECIALIDAD, userData);
}, },
resp_medico_especialidad: async function(message, userData, website_id, session_id){ resp_medico_especialidad: async function(message, userData, website_id, session_id){
for (let i = 0; i < message.content.choices.length; i++) { let choiceElegida = getChoiceElegida(message);
if (message.content.choices[i].selected === true) { if(choiceElegida.value === VER_MAS_OPTION_ID){
userData[ID_AGENDA] = parseInt(message.content.choices[i].value); //Mostrar mas medicos
userData[NOMBRE_MEDICO] = message.content.choices[i].label.split(' -')[0]; //Quitamos la especialidad let choices = await getSiguientesMedicosMostrar(userData);
await this.ask_fecha_turno(message, userData, website_id, session_id); 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){ ask_fecha_turno: async function(message, userData, website_id, session_id){
...@@ -159,7 +190,7 @@ module.exports = ...@@ -159,7 +190,7 @@ module.exports =
}, },
resp_fecha_turno: async function(message, userData, website_id, session_id){ resp_fecha_turno: async function(message, userData, website_id, session_id){
userData[FECHA_TURNO] = message.content; 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++){ for(let i=0; i<medicos_especialidad.length; i++){
if(medicos_especialidad[i].agendaId === userData[ID_AGENDA]){ if(medicos_especialidad[i].agendaId === userData[ID_AGENDA]){
userData[ID_PERSONA_INSTITUCIONAL] = medicos_especialidad[i].id_persona_institucional; userData[ID_PERSONA_INSTITUCIONAL] = medicos_especialidad[i].id_persona_institucional;
...@@ -174,7 +205,7 @@ module.exports = ...@@ -174,7 +205,7 @@ module.exports =
choices.push(utils.armarChoice(i.toString(), turnos[i].fechaHora)); choices.push(utils.armarChoice(i.toString(), turnos[i].fechaHora));
} }
//TODO: agregar 'Mostrar mas' //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.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); await crisp.setSiguientePaso(website_id, session_id, pasos.RESP_HORA_TURNO, userData);
}, },
...@@ -187,7 +218,7 @@ module.exports = ...@@ -187,7 +218,7 @@ module.exports =
turno = turnosDisponibles[i]; turno = turnosDisponibles[i];
} }
} }
userData[TURNO_ELEGIDO] = JSON.stringify(turno); userData[TURNO_ELEGIDO] = turno;
await this.ask_tipo_documento(message, userData, website_id, session_id); await this.ask_tipo_documento(message, userData, website_id, session_id);
}, },
ask_tipo_documento: async function(message, userData, website_id, session_id){ ask_tipo_documento: async function(message, userData, website_id, session_id){
...@@ -246,7 +277,7 @@ module.exports = ...@@ -246,7 +277,7 @@ module.exports =
await crisp.sendTextMessage(website_id, session_id, LINK_SOLICITAR_ACCESO_POR_EMAIL); await crisp.sendTextMessage(website_id, session_id, LINK_SOLICITAR_ACCESO_POR_EMAIL);
return; 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]), let resp = await is.crearTurno(userData[TIPO_DOCUMENTO], userData[NUMERO_DOCUMENTO], toFechaUsa(userData[FECHA_NACIMIENTO]),
userData[SEXO], userData[CORREO], 0, turnoElegido.horarioId, turnoElegido.fechaHora); userData[SEXO], userData[CORREO], 0, turnoElegido.horarioId, turnoElegido.fechaHora);
if(resp.success === true){ 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