Ejemplo n.º 1
0
    def registrar(self):
        con = connection()
        retorno = False
        if not self.verificar_usuario_registrado() and not self.verificar_email():
            cursor = con.execute("INSERT INTO Usuarios VALUES (%s, %s, %s, %s, %s ,%s)",
                                 [self.num_cuenta, self.saldo, self.nombre, self.apellido,
                                  self.email, self.estado], True)
            if cursor != None:
                rowcount = cursor.rowcount
                if rowcount > 0:
                    retorno = True

                    logging.info("Usuario con email %s y numero de cuenta %s insertado correctamente" % (
                        self.email, self.num_cuenta))
                else:
                    logging.warning('Error registrando usuario %s' % self.email)

            else:
                logging.error("Error interno al registrar usuario")

        else:
            logging.warning("El usuario o email ya esta registrado")

        con.close_connection()
        return retorno
Ejemplo n.º 2
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.º 3
0
    def verificar_email(self):
        retorno = False
        con = connection()
        cursor = con.execute("SELECT nombre FROM Usuarios WHERE email = %s", [self.email])
        if cursor != None:
            output = cursor.fetchall()
            if len(output) >= 1:
                retorno = True
                logging.info(
                    "Email %s ya se encuentra registrado" % (self.email))
            else:
                logging.warning("El email %s no esta registrado" % self.email)
        else:
            logging.error("Error interno al verificar usuario")

        con.close_connection()
        return retorno
Ejemplo n.º 4
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.º 5
0
 def verificar_retiro_espera(self):
     retorno = False
     id_retiro = 0
     con = connection()
     cursor = con.execute(
         "SELECT id_retiro FROM Retiros WHERE numc_usuario = %s "
         "AND estado_retiro = 'E'", [self.num_cuenta])
     if cursor != None:
         output = cursor.fetchall()
         if len(output) == 1:
             output = output[0]
             retorno = True
             id_retiro = output[0]
             logging.info(
                 "Retiro %s en espera" % (output[0]))
         else:
             logging.warning("No existen Retiros en espera de confirmación")
     else:
         logging.error("Error interno al verificar Retiro")
     con.close_connection()
     return (retorno, id_retiro)
Ejemplo n.º 6
0
 def cargar_datos(self):
     retorno = False
     if self.num_cuenta != 0:
         if self.verificar_usuario_registrado():
             con = connection()
             cursor = con.execute("SELECT * FROM Usuarios WHERE num_cuenta = %s", [self.num_cuenta])
             if cursor != None:
                 # Porque solo nos retorna un usuario
                 output = cursor.fetchall()[0]
                 self.saldo = output[1]
                 self.nombre = output[2]
                 self.apellido = output[3]
                 self.email = output[4]
                 self.estado = output[5]
             else:
                 logging.error("Error interno al cargar datos del usuario")
             retorno = True
             con.close_connection()
             logging.info("Usuario cargado con exito")
     else:
         logging.error("Usuario invalido, datos no iniciados correctamente")
     return retorno
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
    def registro_movimientos(self, ruta : str = ''):
        retorno = True
        strHTML = '''
            <html>
            <head>
            <style>
            table, th, td {
                border: 1px solid black;
                border-collapse: collapse;
            }
            th, td {
                padding: 5px;
                text-align: center;    
            }
            </style>
            </head>
            <h2> Usuario %s %s, Número de cuenta %s</h2>
        ''' % (self.nombre, self.apellido if self.apellido != '' else '-', self.num_cuenta)
        strHTMLConsig = '''
        <h2>Consignaciones</h2>
        <table style="width:100%">
        <tr>
            <th>Monto</th>
            <th>Fecha</th>
        </tr>
        '''

        strHTMLRet = '''
                <h2>Retiros</h2>
                <table style="width:100%">
                <tr>
                    <th>Monto</th>
                    <th>Fecha Solicitud</th>
                    <th>Fecha Confirmación</th>
                </tr>
                '''
        strHTMLTras = '''
                    <h2>Traslados (A : Aceptado, C : Cancelado, E : Espera)</h2>
                    <table style="width:100%">
                    <tr>
                        <th>No Cuenta que recibió</th>
                        <th>Monto</th>
                        <th>Fecha Solicitud</th>
                        <th>Fecha Confirmación</th>
                        <th>Estado</th>
                    </tr>
                        '''

        con = connection()
        cursor = con.execute(
            '''
            SELECT con.monto_consig, con.fecha_consig 
            FROM Consignaciones con INNER JOIN Usuarios us ON con.numc_usuario = us.num_cuenta
            WHERE us.num_cuenta = %s
            ''', params=[self.num_cuenta])

        if cursor == None:
            retorno = False

        output = cursor.fetchall()
        for consig in output:
            str_temp = "<tr><td>$%s</td><td>%s</td></tr>" % (consig[0], consig[1])
            strHTMLConsig += str_temp

        strHTML += strHTMLConsig + "</table>"

        cursor = con.execute(
            '''
            SELECT re.monto_retiro, re.fecha_inicio_retiro, re.fecha_fin_retiro
            FROM Retiros re INNER JOIN Usuarios us ON re.numc_usuario = us.num_cuenta
            WHERE us.num_cuenta = %s
            ''', params=[self.num_cuenta])

        if cursor == None:
            retorno = False

        output = cursor.fetchall()
        for ret in output:
            str_temp = "<tr><td>$%s</td><td>%s</td><td>%s</td></tr>" % (ret[0], ret[1], ret[2])
            strHTMLRet += str_temp

        strHTML += strHTMLRet + "</table>"

        cursor = con.execute(
            '''
            SELECT tra.numc_usuario_receptor, tra.monto_traslado, tra.fecha_inicio_traslado, tra.fecha_fin_traslado, tra.estado_traslado
            FROM  Traslados tra INNER JOIN Usuarios us ON tra.numc_usuario_expedidor = us.num_cuenta
            WHERE us.num_cuenta = %s
            ''', params=[self.num_cuenta])

        if cursor == None:
            retorno = False

        output = cursor.fetchall()
        for tras in output:
            str_temp = "<tr><td>%s</td><td>$%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" % (tras[0], tras[1], tras[2],
                                                                                             tras[3], tras[4])
            strHTMLTras += str_temp

        strHTML += strHTMLTras + "</table>"

        strHTML += "</body></html>"

        nombre_archivo = "%s%s-%s.pdf" % (ruta,self.num_cuenta, time.strftime('%Y-%m-%d_%H:%M:%S'))
        createPDF(strHTML, nombre_archivo)

        con.close_connection()
        return (retorno, nombre_archivo)
Ejemplo n.º 9
0
 def test_connection(self):
     self.conn = connection('test.db')
     self.assertIsNotNone(self.conn)
     return