UNPKG

poserver

Version:
220 lines (198 loc) 8.5 kB
/** * Created by tomdaley on 10/2/16. */ /** * G E T A D D R E S S * * Try to get a valid address from the user. */ /** * @namespace * @property {object} results * @property {object} results.response * @property {number} results.response.index * @property {string} results.response.entity */ var prompts = require("./../const/prompts"); var builder = require('botbuilder'); var Util = require('./../JdBotUtil'); var ChoiceDialog = require("./ChoiceDialog"); var ConfirmDialog = require("./ConfirmDialog"); const library = new builder.Library('getCauseNumber'); library.dialog('/', [ //Prompt for a cause number, court number, and court type function (session, args) { console.log(session); console.log(session.sessionState.callstack); args = args || {}; if (!session.dialogData.hasOwnProperty("prompts")) { session.dialogData.prompts = {}; session.dialogData.prompts.prompt = args.prompt || prompts.askCauseNumber; session.dialogData.prompts.invalidPrompt = args.invalidPrompt || prompts.askCauseNumberReprompt; session.dialogData.prompts.repromptMax = args.repromptMax || 5; session.dialogData.prompts.repromptsRemaining = args.repromptMax || 5; session.dialogData.prompts.editChoice = args.editChoice || prompts.changeChoice; session.dialogData.prompts.confirmChoice = args.confirmChoice || prompts.confirmChoice; } session.dialogData.prompts.reprompt = args.reprompt || false; var prompt; if (session.dialogData.prompts.reprompt) { prompt = session.dialogData.prompts.invalidPrompt; session.dialogData.prompts.repromptMax--; if (session.dialogData.prompts.repromptMax <= 0) { session.send(prompts.sayFullAddressIQuit); session.endDialogWithResult({"status": "GIVEUP"}); } } else { prompt = session.dialogData.prompts.prompt; } builder.Prompts.text(session, prompt); }, //Validate the cause number and see what we get back. function (session, results) { session.userData.case.causeNumber = results.response.toUpperCase().trim(); Util.recognizeCourt(results.response, session.userData.case.county) .then((result) => { if (result.type !== false && result.courtNumber !== false) { //We have a good match. Continue session.userData.case.courtType = result.type; session.userData.case.courtNumber = result.courtNumber; session.userData.case.state = result.state; session.userData.case.country = result.country; session.beginDialog("getCauseNumber:/getCourtType"); } else if ((result.type === false || result.courtNumber === false) && result.ruleCount !== 0) { //We found rules for this country+state+county but none matched the user's input. session.beginDialog('getCauseNumber:/verifyCauseNumber', result); } else { session.beginDialog("getCauseNumber:/getCourtType", result); } }) .catch((error) => { console.error("CauseNumberDialog: Error getting rules."); console.error(error); session.beginDialog("getCauseNumber:/getCourtType"); }) }, //We'll get to here either AFTER the user has explicitly answered the courtNumber and courtType prompts OR //the user has confirmed that his or her causeNumber entry is correct, in which case we need to continue //prompting for courtNumber and courtType. function (session, args) { args = args || {}; if (args.confirmed === true) session.beginDialog("/getCourtType"); else session.endDialogWithResult(session.userData.case); } ]); library.dialog("/getCourtType", [ function (session) { if (session.userData.case.courtType) { session.beginDialog("/getCourtNumber"); } else { //builder.Prompts.choice(session, prompts.askCourtType, prompts.courtTypes, session.userData.config.PromptChoiceOptions); ChoiceDialog.choice(session, prompts.askCourtType, prompts.courtTypes); } }, //Process the court type function (session, results) { //TODO: Check for navigation if (!session.userData.case.courtNumber) { session.userData.case.courtType = results.response.entity; session.beginDialog("/getCourtNumber"); } else { session.endDialogWithResult(session.userData.case); } } ]); library.dialog("/getCourtNumber", [ //Prompt for the court number function (session) { if (session.userData.case.courtNumber) { var result = {}; result.causeNumber = session.userData.case.causeNumber; result.courtType = session.userData.case.courtType; result.courtNumber = session.userData.case.courtNumber; result.county = session.userData.case.county; result.state = session.userData.case.state; result.country = session.userData.case.country; session.endDialogWithResult(result); } else { var prompt = session.gettext(prompts.askCourtNumber, {"ctype": session.userData.case.courtType}); builder.Prompts.text(session, prompt); } }, //Process the court number function (session, results) { session.userData.lastResults = results; session.userData.case.courtNumber = Util.makeOrdinal(results.response); var result = {}; result.causeNumber = session.userData.case.causeNumber; result.courtType = session.userData.case.courtType; result.courtNumber = session.userData.case.courtNumber; result.county = session.userData.case.county; result.state = session.userData.case.state; result.country = session.userData.case.country; session.endDialogWithResult(result); } ]); /** * We end up here if we have rules for particiular country+state+county combination but couldn't find a match based * on the user's input. */ library.dialog("/verifyCauseNumber", [ //Tell user we have rules for that county, but couldn't find a court match. function (session, args, next) { var prompt = session.gettext(prompts.askConfirmCauseNumber, {county: args.county, cause: args.causeNumber}); //builder.Prompts.choice(session, prompt, [prompts.changeChoice, prompts.confirmChoice], // session.userData.config.PromptChoiceOptions); ChoiceDialog.choice(session, prompt, [prompts.changeChoice, prompts.confirmChoice]); }, //See if the user accepts this cause number or wants to retry. function (session, args, next) { //TODO: Check for navigation. if (args.response.entity === prompts.confirmChoice) { args.confirmed = true; session.endDialogWithResult(args); } else { session.replaceDialog('getCauseNumber:/'); } } ]); module.exports = library;