-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalcweb.py
175 lines (143 loc) · 6.12 KB
/
calcweb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import sqlite3
from flask import Flask, jsonify, request
from flask_cors import CORS
from socket import gethostname
DATABASE = 'budget.db'
def get_db_connection():
print("Obteniendo conexión...") # Para probar que se ejecuta la función
conn = sqlite3.connect(DATABASE)
conn.row_factory = sqlite3.Row
return conn
# Crear la tabla 'productos' si no existe
def create_table():
print("Creando tabla productos...") # Para probar que se ejecuta la función
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS categorias (
category_id integer PRIMARY KEY AUTOINCREMENT,
categoria TEXT,
balance INTEGER NULL
)
''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS deposits (
deposit_id INTEGER PRIMARY KEY AUTOINCREMENT,
categoria TEXT,
amount REAL,
descripcion TEXT NONE,
FOREIGN KEY (categoria) REFERENCES categorias(categoria)
)
''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS withdraws (
withdraw_id INTEGER PRIMARY KEY AUTOINCREMENT,
categoria TEXT,
amount REAL,
descripcion TEXT NONE,
FOREIGN KEY (categoria) REFERENCES categorias(categoria)
)
''')
conn.commit()
cursor.close()
conn.close()
# Verificar si la base de datos existe, si no, crearla y crear la tabla
def create_database():
print("Creando la BD...") # Para probar que se ejecuta la función
conn = sqlite3.connect(DATABASE)
conn.close()
create_table()
# Crear la base de datos y la tabla si no existen
create_database()
#-----------------------------------------------------------------------------------------------------------
class Categorias:
def __init__(self):
self.conexion = get_db_connection()
self.cursor = self.conexion.cursor()
self.balance = 0
def agregar_categoria(self, categoria):
producto_existente = self.consultar(categoria)
if producto_existente:
return jsonify({'message': 'Ya existe un producto con ese código.'}), 400
#nuevo_producto = Producto(codigo, descripcion, cantidad, precio)
self.cursor.execute("INSERT INTO categorias (categoria,balance) VALUES(?,?)", (categoria,0))
self.conexion.commit()
return jsonify({'message': 'Producto agregado correctamente.'}), 200
def consultar(self, categoria):
self.cursor.execute("SELECT * FROM categorias WHERE categoria = ?", (categoria,))
row = self.cursor.fetchone()
if row:
return True
return None
def listar_categorias(self):
self.cursor.execute("SELECT * FROM categorias")
rows = self.cursor.fetchall()
categorias = []
for row in rows:
categoria_id, categoria, balance = row
categoria = {'categoria_id': categoria_id, 'categoria': categoria, 'balance': balance}
categorias.append(categoria)
return jsonify(categorias), 200
def deposit(self, categoria, amount, description):
categoria_existente = self.consultar(categoria)
if categoria_existente:
self.cursor.execute("INSERT INTO deposits (categoria, amount, descripcion) VALUES (?, ?, ?)", (categoria, amount, description))
self.conexion.commit()
self.cursor.execute("UPDATE categorias SET balance = balance + ? WHERE categoria = ?", (amount, categoria,))
self.conexion.commit()
return jsonify({'message': 'deposito agregado correctamente.'}), 200
else:
return jsonify({'message': 'no existe la categoria.'}), 404
def check_funds(self, categoria, amount):
self.cursor.execute("SELECT * FROM categorias WHERE categoria = ?", (categoria,))
row = self.cursor.fetchone()
balance = row[2]
if balance >= float(amount):
return True
return jsonify({'message': 'Cantidad de dinero disponible insuficiente.'}), 400
def withdraw(self, categoria, amount, description):
categoria_existente = self.consultar(categoria)
if categoria_existente:
if self.check_funds(categoria, amount):
self.cursor.execute("INSERT INTO withdraws (categoria, amount, descripcion) VALUES (?, ?, ?)", (categoria, amount, description))
self.conexion.commit()
self.cursor.execute("UPDATE categorias SET balance = balance - ? WHERE categoria = ?", (amount, categoria))
self.conexion.commit()
return jsonify({'message': 'retiro realizado correctamente.'}), 200
else:
return jsonify({'message': 'no existe la categoria.'}), 404
#---------------------------------------------------------------------------------
app = Flask(__name__)
CORS(app)
categorias = Categorias()
@app.route('/listado', methods=['GET'])
def obtener_categorias():
return categorias.listar_categorias()
@app.route('/categorias', methods=['POST'])
def agregar_categoria():
categoria = request.json.get('categoria')
return categorias.agregar_categoria(categoria)
@app.route('/depositos', methods=['POST'])
def agregar_deposito():
categoria = request.json.get('categoria')
amount = request.json.get('amount')
descripcion = request.json.get('descripcion')
return categorias.deposit(categoria,amount,descripcion)
@app.route('/withdraws', methods=['POST'])
def agregar_withdraw():
categoria = request.json.get('categoria')
amount = request.json.get('amount')
descripcion = request.json.get('descripcion')
return categorias.withdraw(categoria,amount,descripcion)
@app.route('/')
def index():
return 'API de Inventario'
# Finalmente, si estamos ejecutando este archivo, lanzamos app.
if __name__ == '__main__':
if 'liveconsole' not in gethostname():
app.run()
#app = Flask(__name__)
git init
git branch -M main
git remote add origin [email protected]:NahuelMarek/budjet-app.git
git push -u origin main