db.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. self.conn.close()
  26. if len(res) == 0:
  27. return None
  28. return res[0]
  29. def get_pedido(self, clientid, pedidoid):
  30. cur = self.get_cursor()
  31. cur.execute( "SELECT id, cant_productos, subtotal, fecha, estado, observaciones FROM pedidos where cliente = %s and id = %s", (int(clientid),pedidoid) )
  32. pedido = cur.fetchone()
  33. pedido["fecha"] = pedido["fecha"].isoformat() #strftime("%Y-%m-%d %H:%M")
  34. productos = self.products()
  35. cur.execute( "SELECT id_producto, cantidad FROM productos_pedido where id_pedido = %s", (int(pedidoid),) )
  36. for row in cur.fetchall():
  37. for p in productos:
  38. if p["id"] != row["id_producto"]:
  39. continue
  40. p["cantidad"] = row["cantidad"]
  41. pedido["productos"] = productos
  42. cur.close()
  43. return pedido
  44. def pedidos(self, clientid):
  45. ret=[]
  46. cur = self.get_cursor()
  47. cur.execute( "SELECT id, cant_productos, subtotal, fecha, estado, observaciones FROM pedidos where cliente = %s", (int(clientid),) )
  48. for row in cur.fetchall():
  49. row["fecha"] = row["fecha"].isoformat() #strftime("%Y-%m-%d %H:%M")
  50. ret.append(row)
  51. cur.close()
  52. self.conn.close() #!!!!
  53. return ret
  54. def products(self, _id=None):
  55. ret=[]
  56. if _id is None:
  57. cur = self.get_cursor()
  58. 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)")
  59. for row in cur.fetchall():
  60. row["cantidad"]=0
  61. ret.append(row)
  62. cur.close()
  63. return ret
  64. def update_pedido(self, productos, _hash, obs, id_pedido):
  65. clienteID = int(self.client(_hash)["id"])
  66. cur = self.get_cursor()
  67. cur.execute( "SELECT 1 FROM pedidos where id = %s and cliente = %s", (id_pedido, clienteID) )
  68. if not cur.fetchone():
  69. print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
  70. return
  71. cur.execute( "DELETE FROM productos_pedido WHERE id_pedido = %s", (id_pedido,) )
  72. subtotal = sum([ p["precio"]*p["cantidad"] for p in productos])
  73. cantidad = sum([ p["cantidad"] for p in productos])
  74. cur.execute("UPDATE pedidos SET cant_productos = %s, subtotal = %s, observaciones = %s, fecha=NOW() WHERE id = %s", ( cantidad, subtotal, obs, id_pedido ))
  75. lista_productos = [ (id_pedido,p["id"],p["cantidad"]) for p in productos ]
  76. cur.executemany("insert into productos_pedido(id_pedido,id_producto,cantidad) values (%s, %s, %s)", lista_productos)
  77. self.conn.commit()
  78. cur.close()
  79. def create_pedido(self, productos, _hash, obs):
  80. clienteID = int(self.client(_hash)["id"])
  81. cur = self.get_cursor()
  82. subtotal = sum([ p["precio"]*p["cantidad"] for p in productos])
  83. params = ( clienteID, sum([ p["cantidad"] for p in productos]), subtotal, obs )
  84. #CREADO, CONFIRMADO, ARMADO, ENVIADO
  85. ex = cur.execute("insert into pedidos (cliente, cant_productos, subtotal, observaciones, fecha, estado) values (%s, %s, %s, %s, NOW(), 'CREADO')", params)
  86. _id = cur.lastrowid
  87. lista_productos = [ (_id,p["id"],p["cantidad"]) for p in productos ]
  88. cur.executemany("insert into productos_pedido(id_pedido,id_producto,cantidad) values (%s, %s, %s)", lista_productos)
  89. self.conn.commit()
  90. cur.close()
  91. def confirm(self, _hash, _id):
  92. c = self.client(_hash)
  93. cur = self.get_cursor()
  94. cur.execute("UPDATE pedidos set estado = 'CONFIRMADO', fecha=NOW() where id = %s and cliente = %s and estado = 'CREADO'", (_id,c["id"]))
  95. self.conn.commit()
  96. cur.close()