const axios = require('axios').default; const { removeDiacritics, getRandomInt, remplazos, soloNumero, traeVariablesFromClient } = require('./extraFuncs') const { sendMedia, sendMessage, sendMessageButton, sendMessageList, readChat } = require(`../controllers/send`) const { vamosA, traeUltimaVisita } = require('../adapter/index') /** * LAS FUNCIONES SE DECLARAN COMO UN OBJETO DENTRO DE MODULE.EXPORTS, DE LA SIGUIENTE MANERA: * * nombreFuncion1 : function nombreFuncion1(ctx) { // Aqui va el código de la funcion }, * nombreFuncion2 : function nombreFuncion2(ctx) { // Aqui va el código de la funcion } * * SE PUEDE USAR LA FUNCION traeVariablesFromClient(ctx) PARA OBTENER LAS VARIABLES from, body, name, hasMedia y step: * * const { from, body, name, hasMedia, step } = traeVariablesFromClient(ctx) * * O SE PUEDEN OBTENER DIRECTAMENTE DEL OBJETO ctx QUE RECIBE LA FUNCION: * * const from = ctx.theMsg.from */ module.exports = { /** * Llama el API para traer categorias de Guna. * @param {*} ctx El objeto del mensaje. */ getGunaCats : async function getGunaCats(ctx) { const { from, body, name, hasMedia, step } = traeVariablesFromClient(ctx) let lasOpciones = [] let lasOpciones2 = [] let theUrl = `http://localhost:8888/dbrquery?j={"query":"selectTipoFerreroMty","exec":"ExecuteQuery","params":{"par1":"xxx"}}` const RES = await axios.get(theUrl).then(function (response) { for(reg=0;reg -1){ // Producto con formato correcto. vars[from]['ultimoProd'] = elProd elProd = elProd.substring(0, elProd.indexOf(' $')).trim().toLowerCase() var precio = ctx.theMsg.body.substring(ctx.theMsg.body.indexOf(' $')+2) // console.log("precio",precio) precio = precio.substring(0, precio.indexOf(',')) // console.log("precio",precio) vars[from]['prods'][elProd] = {"cant":0, "precio":precio} // console.log("EL_PROD=", elProd) // console.log(vars[from]['prods']) elMensaje = ctx.theMsg.replyMessage let re = ctx.theMsg.body.trim().toLowerCase() elMensaje = elMensaje.replace(re, elProd.toLowerCase()) } else{ // Producto SIN precio. elMensaje = "El producto que seleccionaste es *incorrecto*, por favor intenta de nuevo." sendMessage(ctx, from, elMensaje, null, step); await delay(500) vars[from]['recompra'] = true getGunaProds(ctx) vamosA(from, "gunaProds") return } sendMessage(ctx, from, elMensaje, null, step); return }, /** * Tomamos la cantidad del producto seleccionado. * @param {*} ctx El objeto del mensaje. */ prodCantidad : async function prodCantidad(ctx) { const { from, body, name, hasMedia, step } = traeVariablesFromClient(ctx); // console.log("Entramos a prodCantidad") let laCant = ctx.theMsg.body.trim() const reg = new RegExp(/^\d+$/) let elProd = vars[from]['ultimoProd'].toLowerCase() elProd = elProd.substring(0, elProd.indexOf(' $')).trim() console.log("SOLO NUMS |" + laCant + "|", reg.test(laCant)) if(reg.test(laCant)){ // console.log(vars) // console.log("Recibimos cant = " + laCant) // console.log("EL_PROD=", vars[from]['prods'][elProd]) // console.log("precio=", vars[from]['prods'][elProd].precio) vars[from]['prods'][elProd] = {"cant":laCant, "precio":vars[from]['prods'][elProd]['precio']} var elMensaje = "" const prods = Object.keys(vars[from]['prods']); var total = 0 prods.forEach((prod, index) => { if( vars[from]['prods'][prod] !== undefined && prod[0] !== undefined ){ elMensaje = elMensaje + `${vars[from]['prods'][prod].cant} - ${prod[0].toUpperCase() + prod.substring(1)}\n` console.log("cant y precio=", vars[from]['prods'][prod].cant, vars[from]['prods'][prod].precio) if(reg.test(vars[from]['prods'][prod].cant) && vars[from]['prods'][prod].precio != ""){ total = total + (vars[from]['prods'][prod].cant * vars[from]['prods'][prod].precio) } } console.log(prod, vars[from]['prods'][prod]); }); let pesos = Intl.NumberFormat('en-US') elMensaje = elMensaje + "\n*Total*: $" + pesos.format(total) elMensaje = elMensaje + "\n¿Quieres agregar mas productos a tu orden?" var bts = { "title":"Tu orden", "message":elMensaje, "buttons":[ {"body":"➕ Agregar productos"}, {"body":"⬅️ Cambiar categoría"}, {"body":"✖️ Terminar"} ] } sendMessageButton(ctx, from, null, bts) } else{ console.log("NO SOLO NUMS") vamosA(from, "gunaProdsAgrega") sendMessage(ctx, from, "Por favor escribe 👉🏽 *solo* 👈🏽 el número.", null, step); } return "1" }, /** * Mandamos nuevamente la lista de productos. * @param {*} ctx El objeto del mensaje. */ comprarMas : async function comprarMas(ctx) { const { from, body, name, hasMedia, step } = traeVariablesFromClient(ctx); console.log("Entramos a comprarMas") vars[from]['recompra'] = true vamosA(from, "gunaProds") await getGunaProds(ctx) vars[from]['recompra'] = undefined return "1" }, /** * Mandamos nuevamente la lista de categorías. * @param {*} ctx El objeto del mensaje. */ terminaCompra : async function terminaCompra(ctx) { const { from, body, name, hasMedia, step } = traeVariablesFromClient(ctx); console.log("Entramos a terminaCompra") vars[from] = [] sendMessage(ctx, from, "!Gracias por tu compra, regresa pronto!", null, step); return }, /** * Llama el API para desbloquear un usuario. * @param {*} ctx El objeto del mensaje. */ desbloqueaUsuario : async function desbloqueaUsuario(ctx) { const { from, body, name, hasMedia, step } = traeVariablesFromClient(ctx); let par1 = ctx.theMsg.body let theUrl = `http://localhost:8888/dbrquery?j={"query":"update_usuario_guna_nobajas","exec":"ExecuteCommand","params":{"par1":"${par1}", "par2":"XXPARAM2XX", "par3":"XXPARAM3XX"}}` const RES = await axios.get(theUrl).then(function (response) { const { AffectedRows } = response.data['respuesta'][0] console.log('AFFECTED_ROWS = ', AffectedRows) if(response.data['respuesta'][0]['AffectedRows']=="1"){ sendMessage(ctx, from, "Listo, usuario *"+response.data['params']['par1']+"* desbloqueado, por favor *cerrar navegadores* y reingresar.", null, step); } else{ sendMessage(ctx, from, "El usuario *"+response.data['params']['par1']+"* no *existe* o esta dado de *baja*, por favor revisarlo y volver a intentar.", null, step); } return response }).catch(function (error) { console.log(error); return error }); }, /** * Llama el API para desbloquear el usuario. * * @param {*} theURL El URL para llamar al API * @param {*} step */ desbloqueaUsuario2 : async function desbloqueaUsuario2(theUrl, step) { // const { from, body, name, hasMedia, step } = traeVariablesFromClient(ctx); // const RES = await axios.get(theUrl).then(function (response) { // const { AffectedRows } = response.data['respuesta'][0] // console.log('AFFECTED_ROWS = ', AffectedRows) // if(response.data['respuesta'][0]['AffectedRows']=="1"){ // sendMessage(ctx, from, "Listo, usuario *"+response.data['params']['par1']+"* desbloqueado, por favor *cerrar navegadores* y reingresar.", null, step); // } // else{ // sendMessage(ctx, from, "El usuario *"+response.data['params']['par1']+"* no *existe* o esta dado de *baja*, por favor revisarlo y volver a intentar.", null, step); // } // return response // }).catch(function (error) { // console.log(error); // return error // }); } } // module.exports = new funcsClass()