def traslados(bot, update): update.message.reply_text("Estoy procesando tú petición...") retorno = OPCIONES user = update.message.from_user msg = update.message.text.replace(" ", "").split("-") numc_receptor = msg[0] monto = int(msg[1]) # Se verifica que el usuario receptor se encuentre registrado typing(bot, update) us = usuario(num_cuenta=user.id) us2 = usuario(numc_receptor) if us2.verificar_usuario_registrado(): typing(bot, update) us.cargar_datos() typing(bot, update) tras = traslado(numc_usuario_expedidor=user.id, numc_usuario_receptor=numc_receptor, monto_traslado=monto) typing(bot, update) tras_result = tras.realizar_traslado() if tras_result[0]: typing(bot, update) status = tools.send_email(config['SMTP']['email'], config['SMTP']['password'], us.email, "Confirmación de Traslado", "El <b>Código</b> de confirmación de Traslado es : %s" % tras_result[1], True) if status: send_message_MARKDOWN(bot, update, "Verifique su Email e ingrese el código de verificación del traslado\n" "seguido de *A* -> Aceptar ó \n" "*C* -> Cancelar\n" "Ejemplo : 1111 - A") else: send_message_MARKDOWN(bot, update, "Lo sentimos no pudimos enviar el Email a %s.\n" \ "Su *Código* de Traslado es : %s" % (us.email, tras_result[1])) retorno = CONFIRMACION_TRASLADO else: logging.info("Usuario sin fondos") send_message_MARKDOWN(bot, update, "Lo sentimos no se pudo realizar el Traslado razón : %s" % tras_result[1]) else: update.message.reply_text("El destinario no se encuentra registrado") return retorno
def confirmacion_retiro(bot, update): user = update.message.from_user logging.info('Usuario %s confirmando el retiro', user.name) retorno = OPCIONES codigo, estado_retiro = update.message.text.replace(" ", "").split("-") ret = retiro(id_retiro=codigo) typing(bot, update) resultado = ret.actualizar_retiro(estado_retiro) if resultado[0]: typing(bot, update) us = usuario(user.id) us.cargar_datos() send_message_MARKDOWN(bot, update, "Retiro realizado con éxito\n" "*Tu nuevo saldo es de* : $%s" % us.saldo) show_options(bot, update) else: update.message.reply_text(resultado[1]) if estado_retiro == 'C': show_options(bot, update) else: retorno = CONFIRMACION_RETIRO return retorno
def actualizar_retiro(self, estado_retiro): retorno = False mensaje = '' if estado_retiro in ('A', 'C'): con = connection() output = con.execute( "SELECT id_retiro,numc_usuario,monto_retiro FROM Retiros WHERE id_retiro = %s", [self.id_retiro]).fetchall() if len(output) == 1: output = output[0] us = usuario(output[1]) us.cargar_datos() logging.info("Actualizando Retiro %s" % self.id_retiro) rowcount = con.execute( "UPDATE Retiros SET estado_retiro = %s, fecha_fin_retiro = %s WHERE id_retiro = %s", [ estado_retiro, time.strftime('%Y-%m-%d %H:%M:%S'), self.id_retiro ], True).rowcount # Si es igual a 1 es porque se pudo realizar la actualizacion if rowcount == 1: if estado_retiro == 'A': logging.info( "cambiando los saldos de los usuario despues del Retiro %s Aceptado" % self.id_retiro) monto = output[2] saldo_disp_us1 = us.saldo - monto rowcount2 = con.execute( "UPDATE Usuarios SET saldo = %s WHERE num_cuenta = %s", [saldo_disp_us1, us.num_cuenta], True).rowcount if rowcount2 == 1: retorno = True mensaje = 'Retiro aceptado' logging.info("Retiro aceptado") else: mensaje = "Retiro cancelado" logging.info("Retiro %s cancelado", self.id_retiro) else: mensaje = 'Código de Traslado erróneo\nPor favor ingrese el código correcto' logging.info("Código de Retiro erróneo") con.close_connection() else: logging.warning("Estado de Retiro Incorrecto") return (retorno, mensaje)
def registro_p2(bot, update): user = update.message.from_user logging.info("Usuario %s en proceso de registro 2" % user.name) email = update.message.text retorno = OPCIONES us = usuario(num_cuenta=user.id, nombre=user.first_name, apellido=user.last_name, email=email) typing(bot, update) status = tools.send_email(config['SMTP']['email'], config['SMTP']['password'], email, "Registrando a MiBanco", "Estamos procesando tus datos, si todo sale bien recibirás un Email confirmando tu registro", True) typing(bot, update) time.sleep(1) if status: typing(bot, update) registrado = us.registrar() if registrado: update.message.reply_text("Te hemos enviado un Email para verificar si el Email ingresado es válido") msg = "*Tus Datos*\n" \ "*Nombre de usuario* : %s \n" \ "*Número de Cuenta* : %s \n" \ "*Saldo* : $500\n" \ "*Email* : %s" % (user.name, user.id, email) typing(bot, update) tools.send_email(config['SMTP']['email'], config['SMTP']['password'], email, "Bienvenido a MiBanco", "Nos Alegra que hagas parte de este KodeFest t.me/MiBanco_bot", False) send_message_MARKDOWN(bot, update, msg) logging.info("Usuario %s registrado" % user.name) # Opciones show_options(bot, update) else: update.message.reply_text("Ups!, Ocurrió un error en tu registro, no se pudo realizar") retorno = ConversationHandler.END else: update.message.reply_text("No pudimos enviarte el Email, intentalo de nuevo con /start:(") retorno = ConversationHandler.END return retorno
def realizar_consignacion(self): retorno = False mensaje = '' if self.numc_usuario != 0: us = usuario(self.numc_usuario) if us.cargar_datos(): con = connection() rowcount = con.execute( "INSERT INTO Consignaciones(numc_usuario, monto_consig, fecha_consig)" "VALUES (%s, %s, %s)", [self.numc_usuario, self.monto_consig, self.fecha_consig], True).rowcount if rowcount > 0: #Se actualiza el saldo del usuario saldo_act = us.saldo + self.monto_consig rowcount2 = con.execute( "UPDATE Usuarios SET saldo = %s WHERE num_cuenta = %s", [saldo_act, us.num_cuenta], True).rowcount if rowcount2 == 1: mensaje = saldo_act logging.info( "Consignación realizada con éxito por %s" % self.numc_usuario) retorno = True else: logging.info("Consignación fallida por el usuario %s", self.numc_usuario) mensaje = "Algo salió mal al realizar su Consignación :(" else: mensaje = "Usuario no registrado" logging.error("Usuario no registrado %s" % self.numc_usuario) else: mensaje = "Usuario inválido" logging.error("Usuario inválido, datos no iniciados correctamente") return (retorno, mensaje)
def micuenta(bot, update): typing(bot, update) user = update.message.from_user us = usuario(user.id) typing(bot, update) if us.verificar_usuario_registrado(): typing(bot, update) us.cargar_datos() msg = "*Tus Datos*\n" \ "*Nombre de usuario* : %s \n" \ "*Número de Cuenta* : %s \n" \ "*Saldo* : $%s\n" \ "*Email* : %s" % (us.nombre + " " + us.apellido, us.num_cuenta, us.saldo, us.email) send_message_MARKDOWN(bot, update, msg) logging.info("Mi cuenta cargada del usuario %s cargados con exito ", user.id) else: msg = "Lo siento, *no estás registrado*" send_message_MARKDOWN(bot, update, msg) show_options(bot, update) return OPCIONES
def confirmacion_traslado(bot, update): user = update.message.from_user logging.info('Usuario %s confirmando el traslado', user.name) retorno = OPCIONES codigo, estado_traslado = update.message.text.replace(" ", "").split("-") tras = traslado(id_traslado=codigo) typing(bot, update) resultado = tras.actualizar_traslado(estado_traslado) if resultado[0]: typing(bot, update) # Envío de email de notificacion al usuario receptor del traslado resultado2 = resultado[1].split("-") typing(bot, update) status = tools.send_email(config['SMTP']['email'], config['SMTP']['password'], resultado2[0], "Usted ha recibido un Traslado de Dinero", "El monto recibido es : $%s y fue enviado por %s con número de cuenta %s" % (resultado2[1], resultado2[2], resultado2[3]), True) if status: update.message.reply_text("Email de notificación de Traslado enviado") typing(bot, update) us = usuario(user.id) us.cargar_datos() send_message_MARKDOWN(bot, update, "Traslado realizado con éxito\n" "*Tu nuevo saldo es de* : $%s" % us.saldo) show_options(bot, update) else: update.message.reply_text(resultado[1]) if estado_traslado in ('C', 'c'): show_options(bot, update) else: retorno = CONFIRMACION_TRASLADO return retorno
def retiros(bot, update): update.message.reply_text("Estoy procesando tú petición...") retorno = OPCIONES user = update.message.from_user monto_retirar = int(update.message.text) us = usuario(num_cuenta=user.id) typing(bot, update) us.cargar_datos() typing(bot, update) # Se crea el retiro reti = retiro(numc_usuario=us.num_cuenta, monto_retiro=monto_retirar) typing(bot, update) retiro_result = reti.realizar_retiro() if retiro_result[0]: typing(bot, update) status = tools.send_email(config['SMTP']['email'], config['SMTP']['password'], us.email, "Confirmación de Retiro", "El <b>Código</b> de confirmación de Retiro es : %s" % retiro_result[1], True) if status: send_message_MARKDOWN(bot, update, "Verifique su Email e ingrese el código de verificación del Retiro\n" "seguido de *A* -> Aceptar ó \n" "*C* -> Cancelar\n" "Ejemplo : 1111 - A") else: send_message_MARKDOWN(bot, update, "Lo sentimos no pudimos enviar el Email a %s.\n" \ "Su *Código* de Retiro es : %s" % (us.email, retiro_result[1])) retorno = CONFIRMACION_RETIRO else: logging.info("Usuario sin fondos") send_message_MARKDOWN(bot, update, "Lo sentimos no se pudo realizar el Retiro razón : %s" % retiro_result[1]) return retorno
def start(bot, update): user = update.message.from_user logging.info("Usuario %s ha iniciado una conversación" % user.name) # para usuario no registrado retorno = REGISTRO_P1 typing(bot, update) us = usuario(user.id) user_register = us.verificar_usuario_registrado() # Verificacion de si el usuario se encuentra registrado if user_register: update.message.reply_text('Bienvenid@ %s a MiBanco ' % (user.name)) show_options(bot, update) # Opciones para usuario registrado retorno = OPCIONES else: msg = "Bienvenid@ %s a MiBanco, por lo que veo no estás registrado, ¿Deseas registrarte? *S/N*" % (user.name) send_message_MARKDOWN(bot, update, msg) return retorno
def opciones(bot, update): retorno = OPCIONES user = update.message.from_user op = update.message.text if op == 'Traslado': logging.info("Usuario %s en Traslado" % user.name) retorno = TRASLADO typing(bot, update) us = usuario(user.id) us.cargar_datos() resultado = us.verificar_traslado_espera() # Si tiene un traslado en espera if resultado[0]: typing(bot, update) status = tools.send_email(config['SMTP']['email'], config['SMTP']['password'], us.email, "Confirmación de Traslado", "El <b>Código</b> de Traslado es : %s" % resultado[1], True) if status: send_message_MARKDOWN(bot, update, "Usted tiene un traslado en espera\n\n" "Verifique su Email e ingrese el código de verificación del Traslado\n" "seguido de *A* -> Aceptar ó \n" "*C* -> Cancelar\n" "Ejemplo : 1111 - A") else: send_message_MARKDOWN(bot, update, "Lo sentimos no pudimos enviar el Email a %s.\n" \ "Su *Código* de Traslado es : %s" % (us.email, resultado[1])) retorno = CONFIRMACION_TRASLADO else: update.message.reply_text( "Por favor ingrese el número de cuenta a la que desea realizarle el traslado y el monto del mismo.\n" "Ejemplo : 78128456 - 50") if op == 'Retiro': logging.info("Usuario %s en Retiro" % user.name) retorno = RETIRO typing(bot, update) us = usuario(user.id) us.cargar_datos() resultado = us.verificar_retiro_espera() # Si tiene un retiro en espera if resultado[0]: typing(bot, update) status = tools.send_email(config['SMTP']['email'], config['SMTP']['password'], us.email, "Confirmación de Retiro", "El <b>Código</b> de confirmación de Retiro es : %s" % resultado[1], True) if status: send_message_MARKDOWN(bot, update, "Usted tiene un Retiro en espera\n\n" "Verifique su Email e ingrese el código de verificación del Retiro\n" "seguido de *A* -> Aceptar ó \n" "*C* -> Cancelar\n" "Ejemplo : 1111 - A") else: send_message_MARKDOWN(bot, update, "Lo sentimos no pudimos enviar el Email a %s.\n" \ "Su *Código* de confirmación de Retiro es : %s" % ( us.email, resultado[1])) retorno = CONFIRMACION_RETIRO else: update.message.reply_text("Por favor escriba la cantidad de dinero a retirar") if op == 'Consignación': logging.info("Usuario %s en Consignación" % user.name) update.message.reply_text("Ingrese el valor a consignar a su cuenta") retorno = CONSIGNACION if op == 'Registro Movimientos': logging.info("Usuario %s solicitando Registro Movimientos" % user.name) typing(bot, update) update.message.reply_text("Estoy generando el informe, espera por favor") us = usuario(user.id) typing(bot, update) us.cargar_datos() resultado = us.registro_movimientos('res/') if resultado[0]: typing(bot, update) bot.sendDocument(chat_id=update.message.chat.id, document=open('%s' % resultado[1], 'rb')) os.remove("%s" % resultado[1]) logging.info("Usuario %s informe enviado" % user.name) else: update.message.reply_text("No pude generar el informe, lo siento") return retorno
def realizar_retiro(self): retorno = False mensaje = '' if self.numc_usuario != 0: us = usuario(self.numc_usuario) if us.cargar_datos(): con = connection() # Si el estado del retiro es E -> ESpera, A -> Aceptada, C -> Cancelada # Solo tomamos una posicion porque solo puede haber una retiro en cola output = con.execute( "SELECT id_retiro, numc_usuario, monto_retiro, fecha_inicio_retiro FROM Retiros WHERE numc_usuario = %s " "AND estado_retiro = 'E'", [self.numc_usuario]).fetchall() if len(output) == 0: saldo_disp = us.saldo - self.monto_retiro if saldo_disp < 0: mensaje = "Usted no posee suficiente dinero para realizar el Retiro" logging.warning( "Usuario 1 %s no tiene fondos para realizar el Retiro" % self.numc_usuario) else: rowcount = con.execute( "INSERT INTO Retiros(numc_usuario,monto_retiro, fecha_inicio_retiro)" "VALUES (%s, %s, %s)", [ self.numc_usuario, self.monto_retiro, self.fecha_inicio_retiro ], True).rowcount if rowcount > 0: # Solo debe haber un dato output2 = con.execute( "SELECT id_retiro FROM Retiros WHERE numc_usuario = %s " "AND estado_retiro = 'E'", [self.numc_usuario]).fetchall()[0] retorno = True mensaje = output2[0] logging.info( "Retiro en cola con éxito a la espera de confirmación" " por el usuario %s", self.numc_usuario) else: logging.info("Retiro fallido por el usuario %s", self.numc_usuario) mensaje = "Algo salió mal al realizar tu Retiro :(" else: output = output[0] self.id_retiro = output[0] self.numc_usuario = output[1] self.monto_retiro = output[2] self.fecha_inicio_retiro = output[3] mensaje = "Usted tiene un Retiro pendiente - %s" % self.id_retiro logging.warning("Usuario %s tiene un retiro pendiente %s" % (self.numc_usuario, self.id_retiro)) else: mensaje = "Usuario no registrado" logging.error("Usuario no regirstrado %s" % self.numc_usuario) else: mensaje = "Usuario inválido" logging.error("Usuario inválido, datos no iniciados correctamente") return (retorno, mensaje)