diff --git a/app.py b/app.py
index 1ad466d..7ce79b1 100644
--- a/app.py
+++ b/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
diff --git a/static/add.js b/static/add.js
index a5a3245..470069f 100644
--- a/static/add.js
+++ b/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('&');
-}
\ No newline at end of file
+}
+
+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();
\ No newline at end of file
diff --git a/templates/adding.html b/templates/adding.html
index bd88b6d..d68fe89 100644
--- a/templates/adding.html
+++ b/templates/adding.html
@@ -108,11 +108,17 @@
-
+
+
-
+
+
@@ -177,11 +183,17 @@
-
+
+
-
+
+
diff --git a/utils/sql_utils.py b/utils/sql_utils.py
index 645ae3a..210546a 100644
--- a/utils/sql_utils.py
+++ b/utils/sql_utils.py
@@ -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)