Initial Commit

This commit is contained in:
2026-04-25 16:08:12 +00:00
commit 66eca93f01
13 changed files with 854 additions and 0 deletions

BIN
templates/Logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 KiB

131
templates/admin.html Normal file
View File

@@ -0,0 +1,131 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Panel - Work Orders</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body class="bg-dark text-white">
<!-- Admin Panel Header -->
<div class="container mt-5 text-center">
<h2>Thor's Hammer Electrical - Admin Panel</h2>
</div>
<!-- Table Container -->
<div class="container mt-4">
<table class="table table-striped table-bordered table-hover">
<thead class="table-dark">
<tr>
<th>ID</th>
<th>Name</th>
<th>Job</th>
<th>Address</th>
<th>City</th>
<th>State</th>
<th>Zipcode</th>
<th>Phone</th>
<th>Submitted At</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for order in work_orders %}
<tr>
<td>{{ order[0] }}</td> <!-- ID -->
<td>{{ order[1] }}</td> <!-- Name -->
<td>{{ order[2] }}</td> <!-- Job -->
<td>{{ order[3] }}</td> <!-- Address -->
<td>{{ order[4] }}</td> <!-- City -->
<td>{{ order[5] }}</td> <!-- State -->
<td>{{ order[6] }}</td> <!-- Zipcode -->
<td>{{ order[7] }}</td> <!-- Phone -->
<td>{{ order[8] }}</td> <!-- Submitted At -->
<td>
<!-- Delete Button -->
<form action="{{ url_for('delete_order', order_id=order[0]) }}" method="POST" style="display:inline;">
<button type="submit" class="btn btn-danger btn-sm">Delete</button>
</form>
<!-- Mark as Complete Button -->
<form action="{{ url_for('mark_complete', order_id=order[0]) }}" method="POST" style="display:inline;">
<button type="submit" class="btn btn-success btn-sm">Mark as Complete</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- Logout Container -->
<div class="container text-center mt-4">
<a href="{{ url_for('completed_jobs') }}" class="btn btn-info btn-lg mb-3">View Completed Jobs</a>
<!-- Logout Button -->
<form action="{{ url_for('logout') }}" method="POST" class="d-inline-block">
<button type="submit" class="btn btn-warning btn-lg mb-3">Logout</button>
</form>
</div>
<h2 class="text-center text-white">Website Analytics</h2>
<div class="row">
<div class="col-md-4">
<div class="card text-center bg-primary text-white">
<div class="card-body">
<h4>Total Visitors</h4>
<h2 id="total-visitors">Loading...</h2>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card text-center bg-success text-white">
<div class="card-body">
<h4>Page Views</h4>
<h2 id="page-views">Loading...</h2>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card text-center bg-warning text-white">
<div class="card-body">
<h4>Most Visited Page</h4>
<h2 id="top-page">Loading...</h2>
</div>
</div>
</div>
</div>
<script>
async function fetchAnalytics() {
try {
let response = await fetch('/analytics');
let data = await response.json();
if (data.error) {
document.getElementById('total-visitors').textContent = "Error";
document.getElementById('page-views').textContent = "Error";
document.getElementById('top-page').textContent = "Error";
} else {
document.getElementById('total-visitors').textContent = data.total_users;
document.getElementById('page-views').textContent = data.total_pageviews;
document.getElementById('top-page').textContent = data.top_page;
}
} catch (error) {
console.error("Error fetching analytics:", error);
}
}
fetchAnalytics();
</script>
<!-- Bootstrap JS and Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body>
</html>

View File

@@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Panel - Completed Jobs</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body class="bg-dark text-white">
<!-- Admin Panel Header -->
<div class="container mt-5 text-center">
<h2>Thor's Hammer Electrical - Completed Jobs</h2>
</div>
<!-- Table Container -->
<div class="container mt-4">
<table class="table table-striped table-bordered table-hover">
<thead class="table-dark">
<tr>
<th>ID</th>
<th>Name</th>
<th>Job</th>
<th>Address</th>
<th>City</th>
<th>State</th>
<th>Zipcode</th>
<th>Phone</th>
<th>Completed At</th>
</tr>
</thead>
<tbody>
{% for job in completed_jobs %}
<tr>
<td>{{ job[0] }}</td> <!-- ID -->
<td>{{ job[1] }}</td> <!-- Name -->
<td>{{ job[2] }}</td> <!-- Job -->
<td>{{ job[3] }}</td> <!-- Address -->
<td>{{ job[4] }}</td> <!-- City -->
<td>{{ job[5] }}</td> <!-- State -->
<td>{{ job[6] }}</td> <!-- Zipcode -->
<td>{{ job[7] }}</td> <!-- Phone -->
<td>{{ job[8] }}</td> <!-- Completed At -->
</tr>
{% endfor %}
</tbody>
</table>
<div class="back-container">
<a href="{{ url_for('admin') }}">
<button class="btn btn-success btn-sm">
Back to Admin Panel</button>
</a>
</div>
</body>
</html>

74
templates/failure.html Normal file
View File

@@ -0,0 +1,74 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ZJ4YKQNNG1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-ZJ4YKQNNG1');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Work Order Form</title>
<link rel="stylesheet" href="styles.css" type="text/css" />
<!-- Cyborg Bootstrap Theme -->
<link href="https://cdn.jsdelivr.net/npm/bootswatch@5.3.0/dist/cyborg/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
<link rel="icon" href="{{ url_for('static', filename='Logo.png') }}">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Oswald:wght@200..700&display=swap" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<img src="{{ url_for('static', filename='Logo.png') }}" width="60" height="60">
<a class="navbar-brand" href="https://thorshammerelectrical.com/index.html">Thor's Hammer Electrical</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item active">
<a class="nav-link" href="https://thorshammerelectrical.com/About.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://thorshammerelectrical.com/Services.html">Services</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://www.help.thorshammerelectrical.com">Submit Work-Order</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://thorshammerelectrical.com/Review.html">Reviews</a>
</li>
</ul>
</div>
</nav>
<div class="d-flex min-vh-100 align-items-center justify-content-center">
<div class="d-flex flex-column align-items-center text-center">
<div class="p-2">
<h1>Something went wrong. Please try again!</h1>
</div>
<br>
<div class="p-2">
<button class="btn btn-danger">
<a href="{{ url_for('index') }}" class="text-white text-decoration-none">Back to Form</a>
</button>
</div>
</div>
</div>

113
templates/form.html Normal file
View File

@@ -0,0 +1,113 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ZJ4YKQNNG1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-ZJ4YKQNNG1');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Work Order Form</title>
<link rel="stylesheet" href="styles.css" type="text/css" />
<!-- Cyborg Bootstrap Theme -->
<link href="https://cdn.jsdelivr.net/npm/bootswatch@5.3.0/dist/cyborg/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
<link rel="icon" href="{{ url_for('static', filename='Logo.png') }}">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Oswald:wght@200..700&display=swap" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<img src="{{ url_for('static', filename='Logo.png') }}" width="60" height="60">
<a class="navbar-brand" href="https://thorshammerelectrical.com/index.html">Thor's Hammer Electrical</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item active">
<a class="nav-link" href="https://thorshammerelectrical.com/About.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://thorshammerelectrical.com/Services.html">Services</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://www.help.thorshammerelectrical.com">Submit Work-Order</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://thorshammerelectrical.com/Review.html">Reviews</a>
</li>
</ul>
</div>
</nav>
<!-- Form Container -->
<div class="col-lg-8 mx-auto">
<h1 class="text-white">Thor's Hammer Electrical Work-Order Form</h1>
<p class="text-white">Got a job for us? Submit it here and Leonard will get back to you as soon as possible!</p>
<form action="/submit" method="POST">
<!-- Form Fields -->
<div class="mb-4">
<label for="name" class="form-label">Name:</label>
<input type="text" id="name" name="name" class="form-control" required>
</div>
<div class="mb-4">
<label for="job" class="form-label">Job Details:</label>
<textarea id="job" name="job" class="form-control" required></textarea>
</div>
<div class="mb-4">
<label for="address" class="form-label">Address:</label>
<textarea id="address" name="address" class="form-control" required></textarea>
</div>
<div class="mb-4">
<label for="city" class="form-label">City:</label>
<input type="text" id="city" name="city" class="form-control" required>
</div>
<div class="mb-4">
<label for="state" class="form-label">State:</label>
<input type="text" id="state" name="state" class="form-control" required>
</div>
<div class="mb-4">
<label for="zipcode" class="form-label">Zip Code:</label>
<input type="text" id="zipcode" name="zipcode" class="form-control" required>
</div>
<div class="mb-4">
<label for="phone" class="form-label">Phone Number:</label>
<input type="text" id="phone" name="phone" class="form-control" required>
</div>
<!-- Submit Button -->
<div class="d-grid gap-2">
<input type="submit" value="Submit" class="btn btn-danger btn-lg">
</div>
</form>
</div>
</div>
<!-- Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body>
</html>

67
templates/login.html Normal file
View File

@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<title>Login</title>
<style>
body {
background: linear-gradient(to right, #667eea, #764ba2);
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
.login-container {
background: white;
padding: 2rem;
border-radius: 10px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
text-align: center;
max-width: 400px;
width: 100%;
}
.logo-placeholder {
width: 80px;
height: 80px;
background: #ddd;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
margin: 0 auto 1rem;
font-weight: bold;
color: #666;
}
.logo {
width: 100px; /* Adjust size as needed */
height: auto;
display: block;
margin: 0 auto 1rem; /* Centers the logo */
}
</style>
</head>
<body>
<div class="login-container">
<img src="{{ url_for('static', filename='Logo.png') }}" alt="Logo" class="logo">
<h2 class="mb-3">Login</h2>
<form action="/login" method="POST">
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<button type="submit" class="btn btn-primary btn-block">Login</button>
</form>
</div>
</body>
</html>

9
templates/styles.css Normal file
View File

@@ -0,0 +1,9 @@
.bg-dark-gray {
background-color: #333333; /* Darker Gray */
}
body {
background-color: #000000; /* Black background for body */
}

74
templates/success.html Normal file
View File

@@ -0,0 +1,74 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ZJ4YKQNNG1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-ZJ4YKQNNG1');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Work Order Form</title>
<link rel="stylesheet" href="styles.css" type="text/css" />
<!-- Cyborg Bootstrap Theme -->
<link href="https://cdn.jsdelivr.net/npm/bootswatch@5.3.0/dist/cyborg/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
<link rel="icon" href="{{ url_for('static', filename='Logo.png') }}">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Oswald:wght@200..700&display=swap" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<img src="{{ url_for('static', filename='Logo.png') }}" width="60" height="60">
<a class="navbar-brand" href="https://thorshammerelectrical.com/index.html">Thor's Hammer Electrical</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item active">
<a class="nav-link" href="https://thorshammerelectrical.com/About.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://thorshammerelectrical.com/Services.html">Services</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://www.help.thorshammerelectrical.com">Submit Work-Order</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://thorshammerelectrical.com/Review.html">Reviews</a>
</li>
</ul>
</div>
</nav>
<div class="d-flex min-vh-100 align-items-center justify-content-center">
<div class="d-flex flex-column align-items-center text-center">
<div class="p-2">
<h1>Success! Thank you for choosing Thor's Hammer</h1>
</div>
<br>
<div class="p-2">
<button class="btn btn-danger">
<a href="https://thorshammerelectrical.com" class="text-white text-decoration-none">Back to Home</a>
</button>
</div>
</div>
</div>