db.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import pymysql
  2. class db():
  3. DB = "EBA_STOCK"
  4. USER = "root"
  5. PASSWORD = "howdoiturnthison"
  6. def get_cursor(self):
  7. if not self.conn.open:
  8. self.connect()
  9. self.conn.ping(reconnect=True)
  10. try:
  11. cur = self.conn.cursor()
  12. except:
  13. self.connect()
  14. cur = self.conn.cursor()
  15. return cur
  16. def connect(self):
  17. self.conn = pymysql.connect(unix_socket='/var/run/mysqld/mysqld.sock', user=db.USER, passwd=db.PASSWORD, db=db.DB,cursorclass=pymysql.cursors.DictCursor)
  18. def __init__(self):
  19. self.connect()
  20. def client(self, _hash):
  21. cur = self.get_cursor()
  22. cur.execute("SELECT id,nombre,apellido,hash FROM clientes where hash=%s", (_hash,))
  23. res = cur.fetchall()
  24. cur.close()
  25. if len(res) == 0:
  26. return None
  27. return res[0]
  28. def get_pedido(self, clientid, pedidoid):
  29. cur = self.get_cursor()
  30. cur.execute( "SELECT id, cant_productos, subtotal, fecha, estado, observaciones FROM pedidos where cliente = %s and id = %s", (int(clientid),pedidoid) )
  31. pedido = cur.fetchone()
  32. pedido["fecha"] = pedido["fecha"].isoformat() #strftime("%Y-%m-%d %H:%M")
  33. productos = self.products()
  34. cur.execute( "SELECT id_producto, cantidad FROM productos_pedido where id_pedido = %s", (int(pedidoid),) )
  35. for row in cur.fetchall():
  36. for p in productos:
  37. if p["id"] != row["id_producto"]:
  38. continue
  39. p["cantidad"] = row["cantidad"]
  40. pedido["productos"] = productos
  41. cur.close()
  42. return pedido
  43. def pedidos(self, clientid):
  44. ret=[]
  45. cur = self.get_cursor()
  46. cur.execute( "SELECT id, cant_productos, subtotal, fecha, estado, observaciones FROM pedidos where cliente = %s", (int(clientid),) )
  47. for row in cur.fetchall():
  48. row["fecha"] = row["fecha"].isoformat() #strftime("%Y-%m-%d %H:%M")
  49. ret.append(row)
  50. cur.close()
  51. return ret
  52. def products(self, _id=None):
  53. ret=[]
  54. if _id is None:
  55. cur = self.get_cursor()
  56. 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)")
  57. for row in cur.fetchall():
  58. row["cantidad"]=0
  59. ret.append(row)
  60. cur.close()
  61. return ret
  62. def update_pedido(self, productos, _hash, obs, id_pedido):
  63. clienteID = int(self.client(_hash)["id"])
  64. cur = self.get_cursor()
  65. cur.execute( "SELECT 1 FROM pedidos where id = %s and cliente = %s", (id_pedido, clienteID) )
  66. if not cur.fetchone():
  67. print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
  68. return
  69. cur.execute( "DELETE FROM productos_pedido WHERE id_pedido = %s", (id_pedido,) )
  70. subtotal = sum([ p["precio"]*p["cantidad"] for p in productos])
  71. cantidad = sum([ p["cantidad"] for p in productos])
  72. cur.execute("UPDATE pedidos SET cant_productos = %s, subtotal = %s, observaciones = %s, fecha=NOW() WHERE id = %s", ( cantidad, subtotal, obs, id_pedido ))
  73. lista_productos = [ (id_pedido,p["id"],p["cantidad"]) for p in productos ]
  74. cur.executemany("insert into productos_pedido(id_pedido,id_producto,cantidad) values (%s, %s, %s)", lista_productos)
  75. self.conn.commit()
  76. cur.close()
  77. def create_pedido(self, productos, _hash, obs):
  78. clienteID = int(self.client(_hash)["id"])
  79. cur = self.get_cursor()
  80. subtotal = sum([ p["precio"]*p["cantidad"] for p in productos])
  81. params = ( clienteID, sum([ p["cantidad"] for p in productos]), subtotal, obs )
  82. #CREADO, CONFIRMADO, ARMADO, ENVIADO
  83. ex = cur.execute("insert into pedidos (cliente, cant_productos, subtotal, observaciones, fecha, estado) values (%s, %s, %s, %s, NOW(), 'CREADO')", params)
  84. _id = cur.lastrowid
  85. lista_productos = [ (_id,p["id"],p["cantidad"]) for p in productos ]
  86. cur.executemany("insert into productos_pedido(id_pedido,id_producto,cantidad) values (%s, %s, %s)", lista_productos)
  87. self.conn.commit()
  88. cur.close()
  89. def confirm(self, _hash, _id):
  90. c = self.client(_hash)
  91. cur = self.get_cursor()
  92. cur.execute("UPDATE pedidos set estado = 'CONFIRMADO', fecha=NOW() where id = %s and cliente = %s and estado = 'CREADO'", (_id,c["id"]))
  93. self.conn.commit()
  94. cur.close()