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:
parent
a1bb4fd78d
commit
d6f21b0561
51
app.py
51
app.py
|
|
@ -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
|
||||
|
|
|
|||
125
static/add.js
125
static/add.js
|
|
@ -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) {
|
||||
|
|
@ -103,4 +138,72 @@ function post_data_format(argsObject) {
|
|||
args.push(`${property}=${argsObject[property]}`)
|
||||
}
|
||||
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();
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue