Customer 360: extended Client fields, auto-migrate, updated Rolodex CRUD/templates, QDRO routes/views, importer mapping

QDRO links appear in rolodex_view.html case rows and case.html header when QDRO data exists, matching legacy flows.
This commit is contained in:
HotSwapp
2025-10-13 14:04:35 -05:00
parent 4cd35c66fd
commit 2e2380552e
32 changed files with 194632 additions and 9 deletions

332
rolodex.html Normal file
View File

@@ -0,0 +1,332 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rolodex · Delphi Database</title>
<!-- Bootstrap 5 CSS CDN -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="http://localhost:8000/static/css/custom.css" rel="stylesheet">
</head>
<body class="">
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container-fluid">
<a class="navbar-brand" href="/">
Delphi Database
</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 me-auto">
<li class="nav-item">
<a class="nav-link " href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link " href="/dashboard">Dashboard</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="/rolodex">Rolodex</a>
</li>
<li class="nav-item">
<a class="nav-link " href="/payments">Payments</a>
</li>
<li class="nav-item">
<a class="nav-link " href="/admin">Admin</a>
</li>
</ul>
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="bi bi-person-circle me-1"></i>admin
</a>
<ul class="dropdown-menu" aria-labelledby="userDropdown">
<li><a class="dropdown-item" href="/profile">Profile</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="/logout">Logout</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<!-- Main Content -->
<main class="container-fluid mt-4">
<div class="row g-3 align-items-center mb-3">
<div class="col-auto">
<h2 class="mb-0">Rolodex</h2>
</div>
<div class="col ms-auto">
<form class="row g-2" method="get" action="/rolodex">
<div class="col-md">
<input class="form-control" type="search" name="q" placeholder="Search name or company" aria-label="Search" value="">
</div>
<div class="col-md">
<input class="form-control" type="search" name="phone" placeholder="Phone contains" aria-label="Phone" value="">
</div>
<div class="col-auto">
<input type="hidden" name="page_size" value="5">
<button class="btn btn-outline-primary" type="submit">
<i class="bi bi-search me-1"></i>Search
</button>
</div>
<div class="col-auto">
<a class="btn btn-outline-secondary" href="/rolodex">
<i class="bi bi-x-circle me-1"></i>Clear
</a>
</div>
<div class="col-auto">
<a class="btn btn-primary" href="/rolodex/new">
<i class="bi bi-plus-lg me-1"></i>New Client
</a>
</div>
</form>
</div>
<div class="col-12 text-muted small">
Showing 15 of 52076
</div>
<div class="col-12">
<div class="table-responsive">
<form method="post" action="/reports/phone-book" class="js-answer-table">
<table class="table table-hover align-middle">
<thead class="table-light">
<tr>
<th style="width: 40px;"><input class="form-check-input js-select-all" type="checkbox"></th>
<th width="220">Name</th>
<th>Company</th>
<th>Address</th>
<th>City</th>
<th width="80">State</th>
<th width="110">ZIP</th>
<th width="200">Phones</th>
<th width="140" class="text-end">Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td><input class="form-check-input" type="checkbox" name="client_ids" value="47"></td>
<td><span class="fw-semibold">AMERICAN BAR ASSOCIATION, </span></td>
<td></td>
<td>DEPT 1551, 135 S LASALLE</td>
<td>Chicago</td>
<td>IL</td>
<td>60674-1551</td>
<td>
<span class="text-muted"></span>
</td>
<td class="text-end">
<a class="btn btn-sm btn-outline-primary" href="/rolodex/47">
<i class="bi bi-person-lines-fill me-1"></i>View
</a>
</td>
</tr>
<tr>
<td><input class="form-check-input" type="checkbox" name="client_ids" value="31"></td>
<td><span class="fw-semibold">Aagerup, Lisa</span></td>
<td></td>
<td>N76 W30708 County Road VV</td>
<td>Hartland</td>
<td>WI</td>
<td>53029</td>
<td>
<span class="badge bg-light text-dark me-1">1-262-548-8908</span>
</td>
<td class="text-end">
<a class="btn btn-sm btn-outline-primary" href="/rolodex/31">
<i class="bi bi-person-lines-fill me-1"></i>View
</a>
</td>
</tr>
<tr>
<td><input class="form-check-input" type="checkbox" name="client_ids" value="32"></td>
<td><span class="fw-semibold">Aagerup, Michael</span></td>
<td></td>
<td>N67 W29102 Old Oak Lane</td>
<td>Hartland</td>
<td>WI</td>
<td>53029</td>
<td>
<span class="text-muted"></span>
</td>
<td class="text-end">
<a class="btn btn-sm btn-outline-primary" href="/rolodex/32">
<i class="bi bi-person-lines-fill me-1"></i>View
</a>
</td>
</tr>
<tr>
<td><input class="form-check-input" type="checkbox" name="client_ids" value="33"></td>
<td><span class="fw-semibold">Aaholm, John</span></td>
<td></td>
<td>1420 S. Riverview Lane</td>
<td>Appleton</td>
<td>WI</td>
<td>54915</td>
<td>
<span class="text-muted"></span>
</td>
<td class="text-end">
<a class="btn btn-sm btn-outline-primary" href="/rolodex/33">
<i class="bi bi-person-lines-fill me-1"></i>View
</a>
</td>
</tr>
<tr>
<td><input class="form-check-input" type="checkbox" name="client_ids" value="34"></td>
<td><span class="fw-semibold">Aaholm, Shelley</span></td>
<td></td>
<td>1420 S. Riverview Lane</td>
<td>Appleton</td>
<td>WI</td>
<td>54915</td>
<td>
<span class="badge bg-light text-dark me-1">1-920-460-0527</span>
</td>
<td class="text-end">
<a class="btn btn-sm btn-outline-primary" href="/rolodex/34">
<i class="bi bi-person-lines-fill me-1"></i>View
</a>
</td>
</tr>
</tbody>
</table>
</form>
<div class="d-flex gap-2 mb-2">
<button type="submit" class="btn btn-outline-secondary">
<i class="bi bi-journal-text me-1"></i>Phone Book (Selected)
</button>
<a class="btn btn-outline-secondary" href="/reports/phone-book?format=csv">
<i class="bi bi-filetype-csv me-1"></i>Phone Book CSV (Current Filter)
</a>
<a class="btn btn-outline-secondary js-submit-to" data-action="/reports/phone-book-address" href="#">
<i class="bi bi-journal-text me-1"></i>Phone+Address (Selected)
</a>
<a class="btn btn-outline-secondary js-submit-to" data-action="/reports/envelope" href="#">
<i class="bi bi-envelope me-1"></i>Envelope (Selected)
</a>
<a class="btn btn-outline-secondary js-submit-to" data-action="/reports/rolodex-info" href="#">
<i class="bi bi-card-text me-1"></i>Rolodex Info (Selected)
</a>
</div>
</div>
</div>
<div class="col-12">
<nav aria-label="Pagination">
<ul class="pagination mb-0">
<li class="page-item disabled">
<a class="page-link" href="/rolodex?page=1&page_size=5" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<li class="page-item active">
<a class="page-link" href="/rolodex?page=1&page_size=5">1</a>
</li>
<li class="page-item ">
<a class="page-link" href="/rolodex?page=2&page_size=5">2</a>
</li>
<li class="page-item ">
<a class="page-link" href="/rolodex?page=3&page_size=5">3</a>
</li>
<li class="page-item ">
<a class="page-link" href="/rolodex?page=2&page_size=5" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</main>
<!-- Footer -->
<footer class="bg-light text-center text-muted mt-5 py-3">
<div class="container">
<small>&copy; 2025 Delphi Database. All rights reserved.</small>
</div>
</footer>
<!-- Bootstrap 5 JS Bundle CDN -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<script src="http://localhost:8000/static/js/custom.js"></script>
</body>
</html>