db.py 4.1 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 and estado != 'CANCELADO'", (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) or id = 8000")
  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()