Started implementing actual function for add.html

Working on sending data to the backend and actually doing something with
it.
This commit is contained in:
Billy 2024-05-02 17:38:39 -04:00
parent e84d75e07f
commit a1bb4fd78d
7 changed files with 233 additions and 41 deletions

62
app.py
View File

@ -6,6 +6,7 @@ app = Flask(__name__)
connection = sql_utils.connect_database('ubuntu-mariadb.home','admin','password','inventory') connection = sql_utils.connect_database('ubuntu-mariadb.home','admin','password','inventory')
### main.html paths
@app.route('/user_search') @app.route('/user_search')
def user_search(): def user_search():
data = request.args.get('data') data = request.args.get('data')
@ -47,8 +48,67 @@ left join users u on u.assigned_asset=a.asset_id
data = sql_utils.read_query(connection,query) data = sql_utils.read_query(connection,query)
return data return data
@app.route('/card_list')
def card_list():
query = '''
select c.card_number,c.display_number,u.name assigned_user
from access_cards c
left join users u on u.assigned_card=c.card_number
'''
data = sql_utils.read_query(connection,query)
return data
@app.route('/user_list')
def user_list():
query = '''
select * from users;
'''
data = sql_utils.read_query(connection,query)
return data
### add.html paths
@app.route("/add_asset", methods=['POST'])
def add_asset():
data = request.json
query = f'''
insert into assets (asset_id,serial,model,category) values
(%(tag)s, %(serial)s, %(model)s, %(category)s)
'''
result = sql_utils.send_query(connection,query,data)
if result:
return "success"
else:
return "failure"
@app.route("/add_user",methods=['POST'])
def add_user():
data = request.json
query = f'''
insert into users (id_num,name,assigned_asset,assigned_card) values
(%(id)s, %(name)s, %(asset)s, %(card)s)
'''
result = sql_utils.send_query(connection,query,data)
if result:
return "success"
else:
return "failure"
@app.route("/add_card")
def add_card():
return None
@app.route("/modify_asset")
def modify_asset():
return None
@app.route("/modify_user")
def modify_user():
return None
@app.route("/modify_card")
def modify_card():
return None
### Pages
@app.route('/add') @app.route('/add')
def add_data(): def add_page():
return render_template('adding.html') return render_template('adding.html')
@app.route("/") @app.route("/")

18
generate_card_data.py Normal file
View File

@ -0,0 +1,18 @@
import utils.sql_utils as sql_utils
import string, random
connection = sql_utils.connect_database('ubuntu-mariadb.home','admin','password','inventory')
cards = []
for i in range(0,100):
num = random.randint(0,100)
if not num in cards:
cards.append(num)
for index,value in enumerate(cards):
query = f'''
insert into access_cards (card_number,display_number) values ({index+1},{value})
'''
sql_utils.send_query(connection,query)
print("done")

View File

@ -1,35 +1,106 @@
function add_asset() { async function add_asset() {
let serial = document.getElementById("add-asset-serial"); let serial = document.getElementById("add-asset-serial");
let tag = document.getElementById("add-asset-tag"); let tag = document.getElementById("add-asset-tag");
let category = document.getElementById("add-asset-category"); let category = document.getElementById("add-asset-category");
let model = document.getElementById("add-asset-model"); let model = document.getElementById("add-asset-model");
if (tag.value == "") {
tag = null;
} else {
tag = tag.value;
document.getElementById("add-asset-tag").value = "";
}
if (serial.value == "") { if (serial.value == "") {
alert('Serial field cannot be empty!') alert("Add asset error:\nThe seiral field cannot be empty!");
return; return;
} else {
serial = serial.value;
document.getElementById("add-asset-serial").value = "";
}
if (category.value == "N/A") {
category = null;
} else {
category = category.value;
document.getElementById("add-asset-category").value = "N/A";
}
if (model.value == "N/A") {
model = null;
} else {
model = model.value;
document.getElementById("add-asset-model").value = "N/A";
} }
console.log(serial,tag,category,model); let serial_data = (serial.value == "") ? null : serial.value;
let tag_data = (tag.value == "") ? null : tag.value;
let category_data = (category.value == "N/A") ? null : category.value;
let model_data = (model.value == "N/A") ? null : model.value;
let data = {
"tag": tag_data,
"serial": serial_data,
"category": category_data,
"model": model_data
}
await fetch("/add_asset", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
})
.then(response => response.text())
.then(data => {
console.log(data);
})
serial.value = "";
tag.value = "";
category.value = "N/A";
model.value = "N/A";
}
async function add_user() {
let id = document.getElementById("add-user-id");
let username = document.getElementById("add-user-name");
let asset = document.getElementById("add-assigned-asset");
let card = document.getElementById("add-assigned-card");
if (username.value == "") {
alert("Add user error:\nUser name field cannot be null!");
return;
}
let id_data = (id.value == "") ? null : id.value;
let username_data = (username.value == "") ? null : username.value;
let asset_data = (asset.value == "") ? null : asset.value;
let card_data = (card.value == "") ? null : card.value;
let data = {
"id": id_data,
"name": username_data,
"asset": asset_data,
"card": card_data
}
await fetch("/add_user",{
method: "POST",
headers: {
"Content-Type":"application/json",
},
body: JSON.stringify(data),
})
.then(response => response.text())
.then(data => {
console.log(data);
})
id.value = "";
username.value = "";
asset.value = "";
card.value = "";
}
function add_card() {
let display = document.getElementById("add-display-number");
let card = document.getElementById("add-card-number");
if (card.value == "") {
alert("Add card error:\nCard number field cannot be null");
return;
}
console.log(
(display.value == "") ? null : display.value,
(card.value == "") ? null : card.value
)
display.value = "";
card.value = "";
}
function post_data_format(argsObject) {
args = []
for (let property in argsObject) {
args.push(`${property}=${argsObject[property]}`)
}
return "?" + args.join('&');
} }

View File

@ -16,11 +16,15 @@
display: inline-block; display: inline-block;
vertical-align: top; vertical-align: top;
} }
a {
display:block;
}
</style> </style>
</head> </head>
<body> <body>
<a href="/">Search Data</a>
<div class="col"> <div class="col">
<h1>Assets</h1> <h1>Assets</h1>
Stuff pertaining to laptops and ipads. Stuff pertaining to laptops and ipads.
@ -66,7 +70,7 @@
<input type="number" name="add-asset-tag" id="add-asset-tag"> <input type="number" name="add-asset-tag" id="add-asset-tag">
<br> <br>
<br> <br>
<label for="add-asset-serial">Serial:</label> <label for="add-asset-serial">Serial*:</label>
<input type="text" name="add-asset-serial" id="add-asset-serial"> <input type="text" name="add-asset-serial" id="add-asset-serial">
<br> <br>
<br> <br>
@ -99,11 +103,11 @@
<input type="number" name="add-user-id" id="add-user-id"> <input type="number" name="add-user-id" id="add-user-id">
<br> <br>
<br> <br>
<label for="add-user-name">User name:</label> <label for="add-user-name">User name*:</label>
<input type="text" name="add-user-name" id="add-user-name"> <input type="text" name="add-user-name" id="add-user-name">
<br> <br>
<br> <br>
<label for="add-assigned-asset">Assigned asset:</label> <label for="add-assigned-asset">Assigned asset tag:</label>
<input type="number" name="add-assigned-asset" id="add-assigned-asset"> <input type="number" name="add-assigned-asset" id="add-assigned-asset">
<br> <br>
<br> <br>
@ -121,7 +125,7 @@
<input type="number" name="add-display-number" id="add-display-number"> <input type="number" name="add-display-number" id="add-display-number">
<br> <br>
<br> <br>
<label for="add-card-number">Card number:</label> <label for="add-card-number">Card number*:</label>
<input type="number" name="add-card-number" id="add-card-number"> <input type="number" name="add-card-number" id="add-card-number">
<br> <br>
<br> <br>
@ -131,7 +135,7 @@
<div class="col"> <div class="col">
<h1>Modify asset</h1> <h1>Modify asset</h1>
<form action="javascript:modify_asset()"> <form action="javascript:modify_asset()">
<label for="modify-asset-tag">Asset Tag:</label> <label for="modify-asset-tag">Asset Tag*:</label>
<input type="number" name="modify-asset-tag" id="modify-asset-tag"> <input type="number" name="modify-asset-tag" id="modify-asset-tag">
<br> <br>
<br> <br>
@ -164,7 +168,7 @@
<div class="col"> <div class="col">
<h1>Modify user</h1> <h1>Modify user</h1>
<form action="javascript:modify_user()"> <form action="javascript:modify_user()">
<label for="modify-user-id">User ID:</label> <label for="modify-user-id">User ID*:</label>
<input type="number" name="modify-user-id" id="modify-user-id"> <input type="number" name="modify-user-id" id="modify-user-id">
<br> <br>
<br> <br>
@ -190,7 +194,7 @@
<input type="number" name="modify-display-number" id="modify-display-number"> <input type="number" name="modify-display-number" id="modify-display-number">
<br> <br>
<br> <br>
<label for="modify-card-number">Card number:</label> <label for="modify-card-number">Card number*:</label>
<input type="number" name="modify-card-number" id="modify-card-number"> <input type="number" name="modify-card-number" id="modify-card-number">
<br> <br>
<br> <br>

View File

@ -11,18 +11,24 @@
margin: 2px; margin: 2px;
padding: 2px; padding: 2px;
} }
.col { .col {
width: 32%; width: 32%;
display: inline-block; display: inline-block;
vertical-align: top; vertical-align: top;
} }
a {
display: block;
}
</style> </style>
</head> </head>
<body> <body>
<a href="/add">Add/Modify data</a>
<div class="col"> <div class="col">
<h1>Assets</h1> <h1>Assets</h1>
<button type="button" onclick="get_assets()">Get assets</button>
<table id="asset_table"> <table id="asset_table">
<tr> <tr>
<td>Asset tag</td> <td>Asset tag</td>
@ -32,7 +38,18 @@
<td>Assigned to</td> <td>Assigned to</td>
</tr> </tr>
</table> </table>
<button type="button" onclick="get_assets()">get assets</button> </div>
<div class="col">
<h1>Users</h1>
<button type="button" onclick="get_users()">Get users</button>
<table id="user_table">
<tr>
<td>ID Number</td>
<td>Name</td>
<td>Assigned asset</td>
<td>Assigned card</td>
</tr>
</table>
</div> </div>
<div class="col"> <div class="col">
<h1>User info search</h1> <h1>User info search</h1>
@ -67,7 +84,7 @@
<script> <script>
async function asset_search() { async function asset_search() {
let tag = document.getElementById("asset-tag").value; let tag = document.getElementById("asset-tag").value;
await fetch('/asset_tag_search?data='+tag) await fetch('/asset_tag_search?data=' + tag)
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
data = data[0]; data = data[0];
@ -82,7 +99,7 @@
}); });
} }
async function user_search() { async function user_search() {
let user_name = document.getElementById("user-name").value; let user_name = document.getElementById("user-name").value;
let user_table = document.getElementById("user-search-results"); let user_table = document.getElementById("user-search-results");
@ -90,7 +107,7 @@
while (user_entries[0]) { while (user_entries[0]) {
user_entries[0].remove(); user_entries[0].remove();
} }
await fetch('/user_search?data='+user_name) await fetch('/user_search?data=' + user_name)
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
for (entry of data) { for (entry of data) {
@ -108,7 +125,7 @@
async function serial_search() { async function serial_search() {
let serial = document.getElementById("asset-serial").value; let serial = document.getElementById("asset-serial").value;
await fetch('/serial_search?data='+serial) await fetch('/serial_search?data=' + serial)
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
data = data[0]; data = data[0];
@ -146,6 +163,28 @@
} }
}); });
} }
async function get_users() {
let elements = document.getElementsByClassName("user_list_data");
while (elements[0]) {
elements[0].remove();
}
let table = document.getElementById("user_table");
await fetch('/user_list')
.then(response => response.json())
.then(data => {
for (let entry of data) {
let tr = document.createElement('tr');
tr.classList.add('user_list_data');
for (let datum of entry) {
let td = document.createElement('td');
td.innerHTML = datum;
tr.appendChild(td);
}
table.appendChild(tr);
}
});
}
</script> </script>
</body> </body>

View File

@ -16,15 +16,15 @@ def connect_database(host, username, password, database):
return connection return connection
def send_query(connection, query): def send_query(connection, query, parameters):
cursor = connection.cursor() cursor = connection.cursor()
result = None
try: try:
cursor.execute(query) cursor.execute(query, parameters)
connection.commit() connection.commit()
return result return True
except Error as err: except Error as err:
print(f'Error: {err}') print(f'Error: {err}')
return False
def read_query(connection, query): def read_query(connection, query):
cursor = connection.cursor() cursor = connection.cursor()