AECC database project.

chore: Update 2025-05-25T15:57:19+00:00

+490 -116
+7 -1
README.md
··· 1 - # Introduction 1 + # Introduccion 2 + 3 + El proyecto se encuentra en: 4 + - https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/ 5 + 6 + El codigo para el proyecto se encuentra en: 7 + - https://codeberg.org/stau/aecc-db/ 2 8 3 9 ## Descripcion general 4 10
+20 -21
activity_transaction.html
··· 1 + <div id="allActivityTransactions" hidden> 2 + <label for="activityTransactionFinderFilter">Filter the results:</label> 3 + <search> 4 + <input type="search" name="activityTransactionFinderFilter" onkeyup="tableFilter(event, allActivitiesTable);" placeholder="filter..."> 5 + </search> 6 + <table id="allActivityTransactionsTable"> 7 + <thead> 8 + <tr> 9 + <th>ID</th> 10 + <th style="width:80ch;">Title</th> 11 + <th style="width:80ch;">Description</th> 12 + <th>Date</th> 13 + <th style="border:0px;"></th> 14 + <th style="border:0px;"></th> 15 + <tr> 16 + </thead> 17 + <tbody></tbody> 18 + </table> 19 + <button onclick="next('activityCreator');">Create a new activity</button> 20 + </div> 1 21 <div id="activityTransactionFunctionality" hidden> 2 22 activityTransaction are <b>AWESOME</b> 3 23 <br /> ··· 32 52 <input type="search" id="tableFilter" onkeyup="table_filter()" placeholder="filter..."> 33 53 </search> 34 54 <table id="activityTransactionResultsTable"></table> 35 - </div> 36 - 37 - <div id="activityTransactionEditor" hidden> 38 - Time to edit a activityTransaction. First, choose a activityTransaction: 39 - <br /> 40 - <br /> 41 - <select id="activityTransactionEditorOptions" onchange="loadactivityTransactionEditorSubmission();" ></select> 42 - <div id="activityTransactionEditorMenu" hidden> 43 - Current activityTransaction description: 44 - <br /> 45 - Field1: <span id="activityTransactionEditorField1"></span> 46 - Field2: <span id="activityTransactionEditorField2"></span> 47 - <br /> 48 - <form id="activityTransactionEditorForm" onsubmit="activityTransactionEditorFormHandler(event);"> 49 - <fieldset> 50 - <legend>Edit activityTransaction:</legend> 51 - <input type="submit" value="Submit" /> 52 - <input type="hidden" id="activityTransactionEditorSubmissionId" value="" /> 53 - </fieldset> 54 - </form> 55 - </div> 56 55 </div> 57 56 58 57 <div id="activityTransactionDeleter" hidden>
+26 -6
api/v1/read/index.php
··· 53 53 } 54 54 55 55 print header("HTTP/1.1 200 Succesfully got activities"); 56 - $out .= json_encode($stmt -> get_result() -> fetch_all()); 56 + $result = $stmt->get_result(); 57 + $out .= json_encode($result->fetch_all()); 57 58 59 + $result->close(); 60 + $db->next_result(); 58 61 $db->close(); 59 62 return $out; 60 63 } ··· 82 85 $stmt -> execute(); 83 86 84 87 print header("HTTP/1.1 200 Succesfully got activity transactions"); 85 - $out .= json_encode($stmt -> get_result() -> fetch_all()); 88 + $result = $stmt->get_result(); 89 + $out .= json_encode($result->fetch_all()); 86 90 91 + $result->close(); 92 + $db->next_result(); 87 93 $db->close(); 88 94 return $out; 89 95 } ··· 121 127 $param_str .= "s"; 122 128 $params[] = validate_input($_GET["password"]); 123 129 } 130 + $s .= "1 = 1;"; 124 131 $stmt = $db -> prepare($s); 125 132 if ($param_str != "") 126 133 $stmt -> bind_param($param_str, ...$params); 134 + $stmt->execute(); 127 135 } 128 136 129 137 print header("HTTP/1.1 200 Succesfully got board member"); 130 - $out .= json_encode($stmt -> get_result() -> fetch_all()); 138 + $result = $stmt->get_result(); 139 + $out .= json_encode($result->fetch_all()); 131 140 141 + $result->close(); 142 + $db->next_result(); 132 143 $db->close(); 133 144 return $out; 134 145 } ··· 189 200 } 190 201 191 202 print header("HTTP/1.1 201 Succesfully got transactions."); 192 - $out .= json_encode($stmt -> get_result() -> fetch_all()); 203 + $result = $stmt->get_result(); 204 + $out .= json_encode($result->fetch_all()); 193 205 206 + $result->close(); 207 + $db->next_result(); 194 208 $db->close(); 195 209 return $out; 196 210 } ··· 227 241 } 228 242 229 243 print header("HTTP/1.1 201 Successfully got products."); 230 - $out .= json_encode($stmt -> get_result() -> fetch_all()); 244 + $result = $stmt->get_result(); 245 + $out .= json_encode($result->fetch_all()); 231 246 247 + $result->close(); 248 + $db->next_result(); 232 249 $db->close(); 233 250 return $out; 234 251 } ··· 274 291 } 275 292 276 293 print header("HTTP/1.1 201 Succesfully got transactions."); 277 - $out .= json_encode($stmt -> get_result() -> fetch_all()); 294 + $result = $stmt->get_result(); 295 + $out .= json_encode($result->fetch_all()); 278 296 297 + $result->close(); 298 + $db->next_result(); 279 299 $db->close(); 280 300 return $out; 281 301 }
+26 -20
api/v1/update/index.php
··· 99 99 $stmt -> bind_param($param_str, ...$params); 100 100 if ($stmt -> execute()) { 101 101 print header("HTTP/1.1 202 Succesfully updated board_member"); 102 - print header("Location: https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/api/v1/read/?t=activity_transaction&m_id=${m_id}"); 102 + print header("Location: https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/api/v1/read/?t=board_member&m_id=${m_id}"); 103 103 } else { 104 104 print header("HTTP/1.1 500 Internal server error ocurred while updating board_member"); 105 105 } ··· 159 159 $stmt = $db -> prepare($s); 160 160 $stmt -> bind_param($param_str, ...$params); 161 161 if ($stmt -> execute()) { 162 - print header("HTTP/1.1 202 Succesfully updated activity_transaction"); 162 + print header("HTTP/1.1 202 Succesfully updated member"); 163 163 print header("Location: https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/api/v1/read/?t=member&m_id=${m_id}"); 164 164 } else { 165 165 print header("HTTP/1.1 500 Internal server error ocurred while updating product"); ··· 218 218 include("../../../lib/db.php"); 219 219 $out = ""; 220 220 if (isset($_POST["t_id"]) && (isset($_POST["type"]) || isset($_POST["date"]) || isset($_POST["quantity"]) || isset($_POST["p_id"]))) { 221 - $s = "UPDATE activity SET "; 221 + $s = "UPDATE transaction SET "; 222 222 $param_str = ""; 223 223 $params = array(); 224 - if (!isset($_POST["type"])) { 225 - $s .= "type = ?, "; 226 - $param_str = "s"; 224 + $comma = ""; 225 + if (isset($_POST["type"])) { 226 + $s .= "type = ?"; 227 + $param_str .= "s"; 227 228 $params[] = validate_input($_POST["type"]); 229 + $comma = ", "; 228 230 } 229 - if (!isset($_POST["date"])) { 230 - $s .= "date = ?, "; 231 - $param_str = "s"; 231 + if (isset($_POST["date"])) { 232 + $s .= $comma . "date = ?"; 233 + $param_str .= "s"; 232 234 $params[] = validate_input($_POST["date"]); 235 + $comma = ", "; 233 236 } 234 - if (!isset($_POST["quantity"])) { 235 - $s .= "quantity = ?, "; 236 - $param_str = "i"; 237 + if (isset($_POST["quantity"])) { 238 + $s .= $comma . "quantity = ?"; 239 + $param_str .= "i"; 237 240 $params[] = validate_input($_POST["quantity"]); 241 + $comma = ", "; 238 242 } 239 - if (!isset($_POST["p_id"])) { 240 - $s .= "p_id = ?, "; 241 - $param_str = "i"; 243 + if (isset($_POST["p_id"])) { 244 + $s .= $comma . "p_id = ?"; 245 + $param_str .= "i"; 242 246 $params[] = validate_input($_POST["p_id"]); 243 247 } 244 - $s .= "1 = 1 WHERE m_id = ?;"; 245 - $param_str = "i"; 246 - $params[] = validate_input($_POST["t_id"]); 248 + $s .= " WHERE t_id = ?;"; 249 + $param_str .= "i"; 250 + $t_id = validate_input($_POST["t_id"]); 251 + $params[] = $t_id; 247 252 $stmt = $db -> prepare($s); 248 253 $stmt -> bind_param($param_str, ...$params); 249 254 if ($stmt -> execute()) { 250 - print header("HTTP/1.1 202 Succesfully updated transaction"); 255 + print header("HTTP/1.1 201 Succesfully updated transaction"); 251 256 print header("Location: https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/api/v1/read/?t=transaction&t_id=${t_id}"); 257 + $out .= json_encode(array("t_id" => $t_id)); 252 258 } else { 253 - print header("HTTP/1.1 500 Internal server error ocurred while updating product"); 259 + print header("HTTP/1.1 500 Internal server error ocurred while updating transaction"); 254 260 } 255 261 } else { 256 262 print header("HTTP/1.1 400 Missing t_id");
+48 -15
board_member.html
··· 1 - <div id="boardMemberFunctionality" hidden> 2 - boardMember are <b>AWESOME</b> 3 - <br /> 4 - What would you like to do? 5 - <br /> 6 - <br /> 7 - <nav> 8 - <button onclick="next('boardMemberCreator')">Create</button> 9 - <button onclick="next('boardMemberFinder');">Find</button> 10 - <button onclick="next('boardMemberEditor');">Edit</button> 11 - <button onclick="next('boardMemberDeleter');">Delete</button> 12 - </nav> 13 - <br /> 14 - a boardMember . . . 1 + <div id="allBoardMembers" hidden> 2 + <h1>Here is the list of board members:</h1> 3 + <label for="boardMemberFinderFilter">Filter the results:</label> 4 + <search> 5 + <input type="search" name="boardMemberFinderFilter" onkeyup="tableFilter(event, allBoardMembersTable);" placeholder="filter..."> 6 + </search> 7 + <table id="allBoardMembersTable"> 8 + <thead> 9 + <tr> 10 + <th>ID</th> 11 + <th>Position</th> 12 + <th>Year</th> 13 + <th>Role</th> 14 + <th>Password</th> 15 + <th style="border:0px;"></th> 16 + <th style="border:0px;"></th> 17 + <tr> 18 + </thead> 19 + <tbody></tbody> 20 + </table> 21 + <button onclick="next('boardMemberCreator'); fillMemberID();">Create a new board member</button> 15 22 </div> 16 23 17 24 <div id="boardMemberCreator" hidden> 18 25 So you want to create a boardMember . . . 19 26 <br /> 20 - <form id="boardMemberCreatorForm" onsubmit="boardMemberCreatorFormHandler(event);"> 27 + <form onsubmit="boardMemberCreatorHandler(event);"> 21 28 <fieldset> 22 29 <legend>boardMember</legend> 30 + <select id="boardMemberMemberID"></select> 31 + <br /> 32 + <label for="position">Position:</label> 33 + <br /> 34 + <input type="text" name="position" minlength="1" maxlength="20" /> 35 + <br /> 36 + <br /> 37 + <label for="year">Year:</label> 38 + <br /> 39 + <input type="number" name="year" min="1700" max="2700" /> 40 + <br /> 41 + <br /> 42 + <label for="role">Role:</label> 43 + <br /> 44 + <select name="role"> 45 + <option value="Write">Write</option> 46 + <option value="Read">Read</option> 47 + <option value="None">None</option> 48 + </select> 49 + <br /> 50 + <br /> 51 + <label for="password">Password:</label> 52 + <br /> 53 + <input type="password" name="password" minlength="10" /> 54 + <br /> 55 + <br /> 23 56 <input type="submit" value="Submit"> 24 57 </fieldset> 25 58 </form>
+8
components/form.js
··· 1 + class form extends HTMLElement { 2 + connectedCallback() { 3 + } 4 + } 5 + 6 + export function registerIncludeComponent() { 7 + customElements.define("x-form", form); 8 + }
+8 -7
index.html
··· 14 14 <link rel="manifest" href="/~diego.estrada1/CCOM/4027/db/assets/site.webmanifest" /> 15 15 16 16 <script src="lib/activity.js"></script> 17 + <script src="lib/board_member.js"></script> 17 18 <script src="lib/egg.js"></script> 18 19 <script src="lib/header.js"></script> 19 20 <script src="lib/member.js"></script> ··· 35 36 </header> 36 37 <hr /> 37 38 <main> 38 - <div id="buttons" style="width:120ch;"> 39 + <div id="buttons"> 39 40 What would you like to work with? 40 41 <br /> 41 42 <br /> 42 - <button onclick="next('allActivities'); initTable(allActivitiesTable, 'activity', 'editActivity', 'deleteActivity')">Activities</button> 43 - <button onclick="next('activityTransactionFunctionality')">Activity Transactions</button> 44 - <button onclick="next('boardMemberFunctionality')">Board Members</button> 43 + <button onclick="next('allActivities'); initTable(allActivitiesTable, 'activity', 'editActivity', 'deleteActivity');">Activities</button> 44 + <!-- <button onclick="next('allActivityTransactions'); initTable(allActivityTransactionsTable, 'activity_transaction', 'editActivityTransaction', 'deleteActivityTransaction')">Activity Transactions</button> --> 45 + <button onclick="next('allBoardMembers'); initTable(allBoardMembersTable, 'board_member', 'editBoardMember', 'deleteBoardMember');">Board Members</button> 45 46 <button onclick="next('memberFunctionality')">Members</button> 46 - <button onclick="next('productFunctionality');">Products</button> 47 - <button onclick="next('transactionFunctionality');">Transactions</button> 47 + <button onclick="next('allProducts'); initTable(allProductsTable, 'product', 'editProduct', 'deleteProduct');">Products</button> 48 + <button onclick="next('allTransactions'); initTable(allTransactionsTable, 'transaction', 'editTransaction', 'deleteTransaction')">Transactions</button> 48 49 <div id="theMatrix"></div> 49 50 </div> 50 51 51 52 <x-include src="activity.html"></x-include> 52 - <x-include src="activity_transaction.html"></x-include> 53 + <!-- <x-include src="activity_transaction.html"></x-include> --> 53 54 <x-include src="board_member.html"></x-include> 54 55 <x-include src="member.html"></x-include> 55 56 <x-include src="product.html"></x-include>
+1 -1
lib/activity.js
··· 89 89 throw msg; 90 90 } else { 91 91 alert(`Succesfully deleted activity with ID: ${a_id}`); 92 - restart(); 92 + initTable(allActivitiesTable, 'activity', 'editActivity', 'deleteActivity'); 93 93 } 94 94 }); 95 95 }
+18
lib/board_member.js
··· 1 1 function board_member() {} 2 + 3 + function fillMemberID() { 4 + try { 5 + fetch(URL + "/api/v1/read/?t=member").then(resp => resp.json()).then(json => { 6 + boardMemberMemberID.innerHTML = ""; 7 + for (var i = 0; i < json.length; ++i) { 8 + 9 + } 10 + }) 11 + } catch (e) { 12 + console.erro(e); 13 + } 14 + } 15 + 16 + function boardMemberCreatorHandler(event) { 17 + event.preventDefault(); 18 + console.log(event.target); 19 + }
+6 -2
lib/header.js
··· 63 63 }); 64 64 } 65 65 66 + function fillSelect(select, SQLTable) { 67 + const body = select; 68 + console.log(select); 69 + } 70 + 66 71 function fillTable(HTMLTable, SQLTable) { 67 72 const body = HTMLTable.tBodies[0]; 68 73 body.innerHTML = ""; 69 - fetch (`${URL}/api/v1/read/?t=${SQLTable}`).then(resp => resp.json()).then(json => { 70 - console.log(json); 74 + fetch(`${URL}/api/v1/read/?t=${SQLTable}`).then(resp => resp.json()).then(json => { 71 75 for (var i = 0; i < json.length; ++i) { 72 76 const obj = json[i]; 73 77 let HTML = "<tr>";
+4
lib/header.php
··· 66 66 function ti($tag, $inside, $content) { 67 67 return "<" . $tag . " " . $inside . ">" . $content . "</" . $tag . ">"; 68 68 } 69 + 70 + function get($arr, $e) { 71 + return isset($arr[$e]) ? validate_input($arr[$e]) : ""; 72 + } 69 73 ?>
+83 -1
lib/member.js
··· 1 - function member() {} 1 + function fillMemberCreatorLogger() { 2 + try { 3 + fetch(URL + "/api/v1/read/?t=member").then(resp => resp.json()).then(json => { 4 + memberCreatorLogger.innerHTML = ""; 5 + for (var i = 0; i < json.length; ++i) { 6 + const obj = json[i]; 7 + memberCreatorLogger.innerHTML += ` 8 + <option value="${obj[0]}">${obj[1]} ${obj[2]} ${obj[3]} ${obj[4]}</option> 9 + `; 10 + } 11 + }); 12 + } catch (error) { 13 + console.error(error.message); 14 + } 15 + } 16 + 17 + function fillMemberFinder() { 18 + try { 19 + fetch(URL + "/api/v1/read/?t=member").then(resp => resp.json()).then(json => { 20 + memberResultsTable.innerHTML = ` 21 + <tr> 22 + <th>ID</th> 23 + <th>Name</th> 24 + <th>Second Name</th> 25 + <th>Last Name</th> 26 + <th>Second Last Name</th> 27 + <th>E-mail</th> 28 + <th>Phone Number</th> 29 + <th>Status</th> 30 + </tr> 31 + `; 32 + 33 + for (var i = 0; i < json.length; ++i) { 34 + const obj = json[i]; 35 + memberResultsTable.innerHTML += ` 36 + <tr> 37 + <th>${obj[0]}</th> 38 + <th>${obj[1]}</th> 39 + <th>${obj[2]}</th> 40 + <th>${obj[3]}</th> 41 + <th>${obj[4]}</th> 42 + <th>${obj[5]}</th> 43 + <th>${obj[6]}</th> 44 + <th>${obj[7]}</th> 45 + </tr> 46 + `; 47 + } 48 + }); 49 + } catch (error) { 50 + console.error(error.message); 51 + } 52 + } 53 + 54 + function memberCreatorFormHandler(event) { 55 + event.preventDefault(); 56 + console.log(event.target); 57 + /* 58 + try { 59 + const logger = event.target[0]; 60 + const name = event.target[2]; 61 + const second_name = event.target[3]; 62 + const last_name = event.target[4]; 63 + const second_last_name = event.target[5]; 64 + const email = event.target[6]; 65 + const phone_number = event.target[7]; 66 + const status = event.target[8]; 67 + const payload = JSON.stringify({ 68 + name: name, 69 + second_name: second_name, 70 + }) 71 + if (confirm(`Do you want to create a member`)) 72 + fetch(URL + "/api/v1/create/", { 73 + method: "POST", 74 + headers: { "Content-Type": "application/json" }, 75 + body: payload 76 + }).then(resp => { 77 + if (response.status == 201) 78 + }); 79 + } catch (error) { 80 + console.error(error.message); 81 + } 82 + */ 83 + }
-2
lib/sql/member.sql
··· 7 7 email VARCHAR(40) NOT NULL, 8 8 phone_number VARCHAR(15) NOT NULL, 9 9 status ENUM("Active", "Inactive") NOT NULL, 10 - t_id INT, 11 10 12 11 PRIMARY KEY (m_id), 13 - FOREIGN KEY (t_id) REFERENCES transaction(t_id) ON DELETE SET NULL, 14 12 FULLTEXT (name, second_name, last_name, second_last_name) 15 13 );
+1 -1
lib/sql/transaction.sql
··· 1 1 CREATE TABLE IF NOT EXISTS transaction ( 2 2 t_id INT NOT NULL AUTO_INCREMENT, 3 3 type ENUM("Expense", "Income") NOT NULL, 4 - Date DATETIME DEFAULT CURRENT_TIMESTAMP, 4 + date DATETIME DEFAULT CURRENT_TIMESTAMP, 5 5 quantity NUMERIC(5,0) NOT NULL, 6 6 p_id INT, 7 7
+127 -4
lib/transaction.js
··· 1 - function fillTransactionCreator() { 1 + function updateTotal() { 2 + 3 + } 4 + function editTransaction(obj) { 5 + transactionEditorID.value = obj[0]; 6 + transactionEditorDate.value = obj[2]; 7 + transactionEditorQuantity.value = obj[3]; 8 + transactionEditorProductID.value = obj[4]; 9 + try { 10 + fetch(URL + "/api/v1/read/?t=product").then(resp => resp.json()).then(json => { 11 + transactionEditorProductID.innerHTML = ""; 12 + const p_id = obj[4]; 13 + const selected_product = json.find(e => e[0] == p_id); 14 + transactionEditorProductID.innerHTML += ` 15 + <option value="${p_id}">${selected_product[2]}</option> 16 + `; 17 + for (var i = 0; i < json.length; ++i) { 18 + if (json[i][0] == selected_product[0]) continue; 19 + transactionEditorProductID.innerHTML += ` 20 + <option value="${json[i][0]}">${json[i][2]}</option> 21 + `; 22 + } 23 + }); 24 + } catch (e) { 25 + console.error(e); 26 + } 27 + next('transactionEditor'); 28 + } 29 + 30 + function deleteTransaction(obj) { 31 + const t_id = obj[0]; 32 + try { 33 + const payload = JSON.stringify({ 34 + t: "transaction", 35 + t_id: t_id 36 + }); 37 + if (confirm(`Are you sure you want to delete the transaction with ID: ${t_id}`)) { 38 + fetch(URL + "/api/v1/delete/", { 39 + method: "POST", 40 + headers: { "Content-Type": "application/json" }, 41 + body: payload 42 + }).then(resp => { 43 + if (resp.status != 204) { 44 + const msg = `Error deleting transaction, status: ${resp.status}`; 45 + alert(msg); 46 + throw msg; 47 + } else { 48 + alert(`Succesfully deleted transaction with ID: ${t_id}`); 49 + initTable(allTransactionsTable, 'transaction', 'editTransaction', 'deleteTransaction'); 50 + } 51 + }); 52 + } 53 + } catch(e) { 54 + console.error(e); 55 + } 56 + } 57 + 58 + function editTransactionHandler(event) { 59 + event.preventDefault(); 60 + console.log(event.target); 61 + const type = event.target[1].value; 62 + const date = event.target[2].value; 63 + const quantity = event.target[3].value; 64 + const p_id = event.target[4].value; 65 + const t_id = event.target[6].value; 66 + try { 67 + if (confirm(`Do you want to edit the transaction with ID: ${t_id}?`)) { 68 + const payload = JSON.stringify({ 69 + t: "transaction", 70 + t_id: t_id, 71 + type: type, 72 + date: date, 73 + quantity: quantity, 74 + p_id: p_id 75 + }) 76 + fetch(URL + "/api/v1/update/", { 77 + method: "POST", 78 + headers: { 79 + "Content-Type": "application/json" 80 + }, 81 + body: payload 82 + }).then(resp => { 83 + if (resp.status != 201) { 84 + const msg = `Error updating transaction, status: ${resp.status}`; 85 + alert(msg); 86 + throw msg; 87 + } 88 + return resp.json(); 89 + }).then(json => { 90 + alert(`Succesfully updated transaction with ID: ${json.t_id}`); 91 + restart(); 92 + }); 93 + } 94 + } catch (e) { 95 + console.error(e); 96 + } 97 + } 98 + 99 + async function fillTransactionCreator() { 2 100 const now = new Date(Date.now()); 3 101 const yyyy = now.getFullYear(); 4 102 const mm = (now.getMonth() < 10 ? "0" : "") + (now.getMonth() + 1); ··· 8 106 const date = `${yyyy}-${mm}-${dd}T${HH}:${MM}`; 9 107 transactionCreatorDate.value = date; 10 108 try { 11 - fetch(URL + "/api/v1/read/?t=product").then(response => response.json()).then(json => { 109 + await fetch(URL + "/api/v1/read/?t=product").then(response => response.json()).then(json => { 12 110 createTransactionProductId.innerHTML = ""; 13 111 for (var i = 0; i < json.length; i++) { 14 112 const obj = json[i]; ··· 21 119 `; 22 120 } 23 121 }); 24 - } catch (error) { 25 - console.error(error.message); 122 + fetch(URL + "/api/v1/read/?t=member").then(resp => resp.json()).then(json => { 123 + initiator.innerHTML = ""; 124 + for (var i = 0; i < json.length; ++i) { 125 + const obj = json[i]; 126 + const m_id = obj[0]; 127 + const name = obj[1]; 128 + const second_name = obj[2]; 129 + const last_name = obj[3]; 130 + const second_last_name = obj[4]; 131 + initiator.innerHTML += ` 132 + <option value="${m_id}">${name} ${second_name} ${last_name} ${second_last_name}</option> 133 + ` 134 + } 135 + }); 136 + fetch(URL + "/api/v1/read/?t=board_member").then(resp => resp.json()).then(json => { 137 + logger.innerHTML = ""; 138 + for (var i = 0; i < json.length; ++i) { 139 + const obj = json[i]; 140 + const m_id = obj[0]; 141 + const position = obj[1]; 142 + logger.innerHTML += ` 143 + <option value="${m_id}">${position}</option> 144 + ` 145 + } 146 + }); 147 + } catch (e) { 148 + console.error(e.message); 26 149 } 27 150 } 28 151
+38 -5
member.html
··· 1 1 <div id="memberFunctionality" hidden> 2 - member are <b>AWESOME</b> 2 + Members are <b>AWESOME</b> 3 3 <br /> 4 4 What would you like to do? 5 5 <br /> 6 6 <br /> 7 7 <nav> 8 - <button onclick="next('memberCreator')">Create</button> 9 - <button onclick="next('memberFinder');">Find</button> 8 + <button onclick="next('memberCreator'); fillMemberCreatorLogger();">Create</button> 9 + <button onclick="next('memberFinder'); fillMemberFinder();">Find</button> 10 10 <button onclick="next('memberEditor');">Edit</button> 11 11 <button onclick="next('memberDeleter');">Delete</button> 12 12 </nav> ··· 18 18 So you want to create a member . . . 19 19 <br /> 20 20 <form id="memberCreatorForm" onsubmit="memberCreatorFormHandler(event);"> 21 + <label for="logger">Logger:</label> 22 + <br /> 23 + <select id="memberCreatorLogger" name="logger"></select> 21 24 <fieldset> 22 - <legend>member</legend> 23 - <input type="submit" value="Submit"> 25 + <legend>Member:</legend> 26 + <label for="name">Name:</label> 27 + <br /> 28 + <input name="name" type="text" minlength="1" maxlength="30" /> 29 + <br /> 30 + <br /> 31 + <label for="second_name">Second name:</label> 32 + <br /> 33 + <input name="second_name" type="text" minlength="1" maxlength="30" /> 34 + <br /> 35 + <br /> 36 + <label for="last_name">Last name:</label> 37 + <br /> 38 + <input name="last_name" type="text" minlength="1" maxlength="30" /> 39 + <br /> 40 + <br /> 41 + <label for="second_last_name">Second last name:</label> 42 + <br /> 43 + <input name="second_last_name" type="text" minlength="1" maxlength="30" /> 44 + <br /> 45 + <br /> 46 + <label for="email">E-mail:</label> 47 + <br /> 48 + <input name="email" type="email" maxlength="30" /> 49 + <br /> 50 + <br /> 51 + <label for="phone_number">Phone number:</label> 52 + <br /> 53 + <input name="phone_number" type="tel" maxlength="15" /> 54 + <br /> 24 55 </fieldset> 56 + <br /> 57 + <input type="submit" value="Submit"> 25 58 </form> 26 59 </div> 27 60
+69 -30
transaction.html
··· 1 - <div id="transactionFunctionality" hidden> 2 - Transactions are <b>AWESOME</b> 3 - <br /> 4 - What would you like to do? 5 - <br /> 6 - <br /> 7 - <nav> 8 - <button onclick="next('transactionCreator'); fillTransactionCreator();">Create</button> 9 - <button onclick="next('transactionFinder'); fillTransactionTable();">Find</button> 10 - <button onclick="next('transactionEditor'); fillTransactionEditor();">Edit</button> 11 - <button onclick="next('transactionDeleter'); fillTransactionDeleter();">Delete</button> 12 - </nav> 13 - <br /> 14 - a transaction . . . 1 + <div id="allTransactions" hidden> 2 + <h1>Here is the list of transactions:</h1> 3 + <label for="transactionFinderFilter">Filter the results:</label> 4 + <search> 5 + <input type="search" name="transactionFinderFilter" onkeyup="tableFilter(event, allTransactionsTable);" placeholder="filter..."> 6 + </search> 7 + <table id="allTransactionsTable"> 8 + <thead> 9 + <tr> 10 + <th>ID</th> 11 + <th>Type</th> 12 + <th>Date</th> 13 + <th>Quantity</th> 14 + <th>Product ID</th> 15 + <th style="border:0px;"></th> 16 + <th style="border:0px;"></th> 17 + <tr> 18 + </thead> 19 + <tbody></tbody> 20 + </table> 21 + <button onclick="next('transactionCreator'); fillTransactionCreator(); updateTotal();">Create a new activity</button> 15 22 </div> 16 23 17 24 <div id="transactionCreator" hidden> ··· 22 29 <legend>Transaction:</legend> 23 30 <label for="type">Type:</label> 24 31 <br /> 25 - <select name="type"> 32 + <select onchange="updateTotal();" name="type"> 26 33 <option value="Expense">Expense</option> 27 34 <option value="Income">Income</option> 28 35 </select> ··· 35 42 <br /> 36 43 <label for="quantity">Quantity:</label> 37 44 <br /> 38 - <input type="number" min="1" max="1000" /> 45 + <input onchange="updateTotal();" type="number" min="1" max="99999" /> 39 46 <br /> 40 47 <br /> 41 48 <label for="productId">Product ID:</label> 42 49 <br /> 43 - <select name="productId" id="createTransactionProductId"></select> 50 + <select onchange="udpateTotal();" name="productId" id="createTransactionProductId"></select> 51 + </fieldset> 52 + <fieldset> 53 + <legend>Metadata:</legend> 54 + <label for="initiator">Initiator:</label> 55 + <br /> 56 + <select name="initiator" id="initiator"></select> 44 57 <br /> 45 58 <br /> 46 - <input type="submit" value="Submit" /> 59 + <label for="logger">Logger:</label> 60 + <br /> 61 + <select name="logger" id="logger"></select> 62 + <br /> 47 63 </fieldset> 64 + <div "transactionTotal"> 65 + Total: $0.00 66 + </div> 67 + <br /> 68 + <input type="submit" value="Submit" /> 48 69 </form> 49 70 </div> 50 71 51 - <div id="transactionFinder" hidden> 52 - <h1>Here is the list of transactions:</h1> 53 - <label for="tableFilter">Filter the results:</label> 54 - <search> 55 - <input type="search" id="tableFilter" onkeyup="table_filter()" placeholder="filter..."> 56 - </search> 57 - <table id="transactionResultsTable"></table> 58 - </div> 59 - 60 72 <div id="transactionEditor" hidden> 61 - </div> 62 - 63 - <div id="transactionDeleter" hidden> 73 + <form onsubmit="editTransactionHandler(event);"> 74 + <fieldset> 75 + <legend>Edit transaction:</legend> 76 + <label for="type">Type:</label> 77 + <br /> 78 + <select name="type"> 79 + <option value="Expense">Expense</option> 80 + <option value="Income">Income</option> 81 + </select> 82 + <br /> 83 + <br /> 84 + <label for="date">Date:</label> 85 + <br /> 86 + <input id="transactionEditorDate" type="datetime-local" name="date" min="1700" max="2700" /> 87 + <br /> 88 + <br /> 89 + <label for="quantity">Quantity:</label> 90 + <br /> 91 + <input id="transactionEditorQuantity" type="number" name="quantity" min="1" max="99999" /> 92 + <br /> 93 + <br /> 94 + <label for="productID">Product:</label> 95 + <br /> 96 + <select id="transactionEditorProductID" name="productID"></select> 97 + <br /> 98 + <br /> 99 + <input type="submit" value="Submit" /> 100 + <input type="hidden" id="transactionEditorID" /> 101 + </fieldset> 102 + </form> 64 103 </div>