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
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 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
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 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)
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
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)
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)
def test_connection(self): self.conn = connection('test.db') self.assertIsNotNone(self.conn) return