Added some QoL features

* added function for selecting from a list of available cards
* added function for selecting from a list of available assets
* did some other shit... dont ask, just keep coding...
This commit is contained in:
Billy 2024-05-02 19:53:37 -04:00
parent a1bb4fd78d
commit d6f21b0561
4 changed files with 177 additions and 21 deletions

51
app.py
View File

@ -51,11 +51,10 @@ left join users u on u.assigned_asset=a.asset_id
@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
select card_number from access_cards
'''
data = sql_utils.read_query(connection,query)
data = [x[0] for x in data]
return data
@app.route('/user_list')
def user_list():
@ -67,6 +66,38 @@ select * from users;
### add.html paths
@app.route("/get_available_assets")
def get_available_assets():
query = '''
SELECT asset_id
FROM assets
WHERE NOT asset_id IN (
SELECT assigned_asset FROM users WHERE assigned_asset IS NOT NULL
);
'''
data = sql_utils.read_query(connection,query)
data = [x[0] for x in data]
return data
@app.route("/get_available_cards")
def get_available_cards():
query = '''
SELECT card_number
FROM access_cards
WHERE NOT card_number IN (
SELECT assigned_card FROM users WHERE assigned_card IS NOT NULL
);
'''
data = sql_utils.read_query(connection,query)
data = [x[0] for x in data]
return data
@app.route('/get_all_cards')
@app.route("/add_asset", methods=['POST'])
def add_asset():
data = request.json
@ -93,9 +124,19 @@ def add_user():
else:
return "failure"
@app.route("/add_card")
@app.route("/add_card",methods=['POST'])
def add_card():
return None
data = request.json
query = f'''
insert into access_cards (card_number,display_number) values
(%(card_number)s,%(display_number)s)
'''
result = sql_utils.send_query(connection, query, data);
if result:
return "success"
else:
return "failure"
@app.route("/modify_asset")
def modify_asset():
return None

View File

@ -52,8 +52,8 @@ async function add_user() {
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 asset_data = (asset.value == "null") ? null : asset.value;
let card_data = (card.value == "null") ? null : card.value;
let data = {
"id": id_data,
@ -63,10 +63,10 @@ async function add_user() {
}
await fetch("/add_user",{
await fetch("/add_user", {
method: "POST",
headers: {
"Content-Type":"application/json",
"Content-Type": "application/json",
},
body: JSON.stringify(data),
})
@ -79,9 +79,11 @@ async function add_user() {
username.value = "";
asset.value = "";
card.value = "";
await populate_data();
}
function add_card() {
async function add_card() {
let display = document.getElementById("add-display-number");
let card = document.getElementById("add-card-number");
@ -89,12 +91,45 @@ function add_card() {
alert("Add card error:\nCard number field cannot be null");
return;
}
console.log(
(display.value == "") ? null : display.value,
(card.value == "") ? null : card.value
)
let display_data = (display.value == "") ? null : parseInt(display.value);
let card_data = (card.value == "") ? null : parseInt(card.value);
if (existing_cards.includes(card_data)) {
console.log("alert thrown");
alert("Add card error\nCard number: " + card_data + " already exists!");
return;
}
// For card validation
await fetch('/card_list')
.then(response => response.json())
.then(data => {
if (data.includes(card_data)) {
console.log("alert thrown");
alert("Add card error\nCard number: " + card_data + " already exists!");
return;
}
});
data = {
"card_number": card_data,
"display_number": display_data
}
await fetch("/add_card", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
})
.then(response => response.text())
.then(data => {
console.log(data);
});
display.value = "";
card.value = "";
await get_next_card();
}
function post_data_format(argsObject) {
@ -104,3 +139,71 @@ function post_data_format(argsObject) {
}
return "?" + args.join('&');
}
async function populate_available_assets() {
let elements = document.getElementsByClassName("available-asset-list-data");
while (elements[0]) {
elements[0].remove();
}
await fetch('/get_available_assets')
.then(response => response.json())
.then(data => {
let add_asset_list = document.getElementById("add-assigned-asset");
let mod_asset_list = document.getElementById("modify-assigned-asset");
for (let entry of data) {
let option = document.createElement("option");
option.innerHTML = entry;
option.value = entry;
option.classList.add("available-asset-list-data");
mod_asset_list.appendChild(option.cloneNode(true));
add_asset_list.appendChild(option);
}
});
}
async function populate_available_cards() {
let elements = document.getElementsByClassName("available-card-list-data");
while (elements[0]) {
elements[0].remove();
}
existing_cards = [];
await fetch('/get_available_cards')
.then(response => response.json())
.then(data => {
let add_card_list = document.getElementById("add-assigned-card");
let mod_card_list = document.getElementById("modify-assigned-card");
for (let entry of data) {
let option = document.createElement("option");
option.innerHTML = entry;
option.value = entry;
option.classList.add("available-card-list-data");
mod_card_list.appendChild(option.cloneNode(true));
add_card_list.appendChild(option);
existing_cards.push(entry);
}
});
}
async function get_next_card() {
await fetch('/card_list')
.then(response => response.json())
.then(data => {
console.log(data);
let next_card = parseInt(data.slice(-1)) + 1;
document.getElementById('add-card-number')
.value = next_card;
});
}
async function populate_data() {
await populate_available_assets();
await populate_available_cards();
await get_next_card();
}
let existing_cards = [];
populate_data();

View File

@ -108,11 +108,17 @@
<br>
<br>
<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"> -->
<select name="add-assigned-asset" id="add-assigned-asset">
<option value="null">N/A</option>
</select>
<br>
<br>
<label for="add-assigned-card">Assigned card:</label>
<input type="number" name="add-assigned-card" id="add-assigned-card">
<!-- <input type="number" name="add-assigned-card" id="add-assigned-card"> -->
<select name="add-assigned-card" id="add-assigned-card">
<option value="null">N/A</option>
</select>
<br>
<br>
<button>Submit</button>
@ -177,11 +183,17 @@
<br>
<br>
<label for="modify-assigned-asset">Assigned asset:</label>
<input type="number" name="modify-assigned-asset" id="modify-assigned-asset">
<!-- <input type="number" name="modify-assigned-asset" id="modify-assigned-asset"> -->
<select name="modify-assigned-asset" id="modify-assigned-asset">
<option value="null">Unassign</option>
</select>
<br>
<br>
<label for="modify-assigned-card">Assigned card:</label>
<input type="number" name="modify-assigned-card" id="modify-assigned-card">
<!-- <input type="number" name="modify-assigned-card" id="modify-assigned-card"> -->
<select name="modify-assigned-card" id="modify-assigned-card">
<option value="null">Unassign</option>
</select>
<br>
<br>
<button>Submit</button>

View File

@ -16,7 +16,7 @@ def connect_database(host, username, password, database):
return connection
def send_query(connection, query, parameters):
def send_query(connection, query, parameters=None):
cursor = connection.cursor()
try:
cursor.execute(query, parameters)