import pymysql class db(): DB = "EBA_STOCK" USER = "root" PASSWORD = "howdoiturnthison" def get_cursor(self): if not self.conn.open: self.connect() self.conn.ping(reconnect=True) try: cur = self.conn.cursor() except: self.connect() cur = self.conn.cursor() return cur def connect(self): self.conn = pymysql.connect(unix_socket='/var/run/mysqld/mysqld.sock', user=db.USER, passwd=db.PASSWORD, db=db.DB,cursorclass=pymysql.cursors.DictCursor) def __init__(self): self.connect() def client(self, _hash): cur = self.get_cursor() cur.execute("SELECT id,nombre,apellido,hash FROM clientes where hash=%s", (_hash,)) res = cur.fetchall() cur.close() self.conn.close() if len(res) == 0: return None return res[0] def get_pedido(self, clientid, pedidoid): cur = self.get_cursor() cur.execute( "SELECT id, cant_productos, subtotal, fecha, estado, observaciones FROM pedidos where cliente = %s and id = %s", (int(clientid),pedidoid) ) pedido = cur.fetchone() pedido["fecha"] = pedido["fecha"].isoformat() #strftime("%Y-%m-%d %H:%M") productos = self.products() cur.execute( "SELECT id_producto, cantidad FROM productos_pedido where id_pedido = %s", (int(pedidoid),) ) for row in cur.fetchall(): for p in productos: if p["id"] != row["id_producto"]: continue p["cantidad"] = row["cantidad"] pedido["productos"] = productos cur.close() return pedido def pedidos(self, clientid): ret=[] cur = self.get_cursor() cur.execute( "SELECT id, cant_productos, subtotal, fecha, estado, observaciones FROM pedidos where cliente = %s and estado != 'CANCELADO'", (int(clientid),) ) for row in cur.fetchall(): row["fecha"] = row["fecha"].isoformat() #strftime("%Y-%m-%d %H:%M") ret.append(row) cur.close() self.conn.close() #!!!! return ret def products(self, _id=None): ret=[] if _id is None: cur = self.get_cursor() cur.execute("SELECT id, nombre, precio, stock > 0 as disponible, stock < 25 as low, stock FROM productos where (id between 1000 and 2999 and id not in (1019, 1014, 2014, 1015, 2015, 1047, 2038, 2030)) or (id between 9000 and 9006) or id = 8000") for row in cur.fetchall(): row["cantidad"]=0 ret.append(row) cur.close() return ret def update_pedido(self, productos, _hash, obs, id_pedido): clienteID = int(self.client(_hash)["id"]) cur = self.get_cursor() cur.execute( "SELECT 1 FROM pedidos where id = %s and cliente = %s", (id_pedido, clienteID) ) if not cur.fetchone(): print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") return cur.execute( "DELETE FROM productos_pedido WHERE id_pedido = %s", (id_pedido,) ) subtotal = sum([ p["precio"]*p["cantidad"] for p in productos]) cantidad = sum([ p["cantidad"] for p in productos]) cur.execute("UPDATE pedidos SET cant_productos = %s, subtotal = %s, observaciones = %s, fecha=NOW() WHERE id = %s", ( cantidad, subtotal, obs, id_pedido )) lista_productos = [ (id_pedido,p["id"],p["cantidad"]) for p in productos ] cur.executemany("insert into productos_pedido(id_pedido,id_producto,cantidad) values (%s, %s, %s)", lista_productos) self.conn.commit() cur.close() def create_pedido(self, productos, _hash, obs): clienteID = int(self.client(_hash)["id"]) cur = self.get_cursor() subtotal = sum([ p["precio"]*p["cantidad"] for p in productos]) params = ( clienteID, sum([ p["cantidad"] for p in productos]), subtotal, obs ) #CREADO, CONFIRMADO, ARMADO, ENVIADO ex = cur.execute("insert into pedidos (cliente, cant_productos, subtotal, observaciones, fecha, estado) values (%s, %s, %s, %s, NOW(), 'CREADO')", params) _id = cur.lastrowid lista_productos = [ (_id,p["id"],p["cantidad"]) for p in productos ] cur.executemany("insert into productos_pedido(id_pedido,id_producto,cantidad) values (%s, %s, %s)", lista_productos) self.conn.commit() cur.close() def confirm(self, _hash, _id): c = self.client(_hash) cur = self.get_cursor() cur.execute("UPDATE pedidos set estado = 'CONFIRMADO', fecha=NOW() where id = %s and cliente = %s and estado = 'CREADO'", (_id,c["id"])) self.conn.commit() cur.close()