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')
|
@app.route('/card_list')
|
||||||
def card_list():
|
def card_list():
|
||||||
query = '''
|
query = '''
|
||||||
select c.card_number,c.display_number,u.name assigned_user
|
select card_number from access_cards
|
||||||
from access_cards c
|
|
||||||
left join users u on u.assigned_card=c.card_number
|
|
||||||
'''
|
'''
|
||||||
data = sql_utils.read_query(connection,query)
|
data = sql_utils.read_query(connection,query)
|
||||||
|
data = [x[0] for x in data]
|
||||||
return data
|
return data
|
||||||
@app.route('/user_list')
|
@app.route('/user_list')
|
||||||
def user_list():
|
def user_list():
|
||||||
|
|
@ -67,6 +66,38 @@ select * from users;
|
||||||
|
|
||||||
### add.html paths
|
### 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'])
|
@app.route("/add_asset", methods=['POST'])
|
||||||
def add_asset():
|
def add_asset():
|
||||||
data = request.json
|
data = request.json
|
||||||
|
|
@ -93,9 +124,19 @@ def add_user():
|
||||||
else:
|
else:
|
||||||
return "failure"
|
return "failure"
|
||||||
|
|
||||||
@app.route("/add_card")
|
@app.route("/add_card",methods=['POST'])
|
||||||
def add_card():
|
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")
|
@app.route("/modify_asset")
|
||||||
def modify_asset():
|
def modify_asset():
|
||||||
return None
|
return None
|
||||||
|
|
|
||||||
123
static/add.js
123
static/add.js
|
|
@ -52,8 +52,8 @@ async function add_user() {
|
||||||
|
|
||||||
let id_data = (id.value == "") ? null : id.value;
|
let id_data = (id.value == "") ? null : id.value;
|
||||||
let username_data = (username.value == "") ? null : username.value;
|
let username_data = (username.value == "") ? null : username.value;
|
||||||
let asset_data = (asset.value == "") ? null : asset.value;
|
let asset_data = (asset.value == "null") ? null : asset.value;
|
||||||
let card_data = (card.value == "") ? null : card.value;
|
let card_data = (card.value == "null") ? null : card.value;
|
||||||
|
|
||||||
let data = {
|
let data = {
|
||||||
"id": id_data,
|
"id": id_data,
|
||||||
|
|
@ -63,10 +63,10 @@ async function add_user() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
await fetch("/add_user",{
|
await fetch("/add_user", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type":"application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
})
|
})
|
||||||
|
|
@ -79,9 +79,11 @@ async function add_user() {
|
||||||
username.value = "";
|
username.value = "";
|
||||||
asset.value = "";
|
asset.value = "";
|
||||||
card.value = "";
|
card.value = "";
|
||||||
|
|
||||||
|
await populate_data();
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_card() {
|
async function add_card() {
|
||||||
let display = document.getElementById("add-display-number");
|
let display = document.getElementById("add-display-number");
|
||||||
let card = document.getElementById("add-card-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");
|
alert("Add card error:\nCard number field cannot be null");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.log(
|
let display_data = (display.value == "") ? null : parseInt(display.value);
|
||||||
(display.value == "") ? null : display.value,
|
let card_data = (card.value == "") ? null : parseInt(card.value);
|
||||||
(card.value == "") ? null : 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 = "";
|
display.value = "";
|
||||||
card.value = "";
|
await get_next_card();
|
||||||
}
|
}
|
||||||
|
|
||||||
function post_data_format(argsObject) {
|
function post_data_format(argsObject) {
|
||||||
|
|
@ -104,3 +139,71 @@ function post_data_format(argsObject) {
|
||||||
}
|
}
|
||||||
return "?" + args.join('&');
|
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>
|
||||||
<br>
|
<br>
|
||||||
<label for="add-assigned-asset">Assigned asset tag:</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"> -->
|
||||||
|
<select name="add-assigned-asset" id="add-assigned-asset">
|
||||||
|
<option value="null">N/A</option>
|
||||||
|
</select>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
<label for="add-assigned-card">Assigned card:</label>
|
<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>
|
||||||
<br>
|
<br>
|
||||||
<button>Submit</button>
|
<button>Submit</button>
|
||||||
|
|
@ -177,11 +183,17 @@
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
<label for="modify-assigned-asset">Assigned asset:</label>
|
<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>
|
||||||
<br>
|
<br>
|
||||||
<label for="modify-assigned-card">Assigned card:</label>
|
<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>
|
||||||
<br>
|
<br>
|
||||||
<button>Submit</button>
|
<button>Submit</button>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ def connect_database(host, username, password, database):
|
||||||
|
|
||||||
return connection
|
return connection
|
||||||
|
|
||||||
def send_query(connection, query, parameters):
|
def send_query(connection, query, parameters=None):
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
try:
|
try:
|
||||||
cursor.execute(query, parameters)
|
cursor.execute(query, parameters)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue