Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
    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)