Add mobile card views to 12 high-priority list pages
Pages were blank on phones because mobile-cards.css hides .table-responsive below 992px. Added .mobile-card-view sections to: GiftCertificates, PurchaseOrders, CreditMemos, VendorCredits, JournalEntries, Appointments, InAppNotifications, BankReconciliations, FixedAssets, RecurringTemplates, SmsAgreements, SmsConsentAudit. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,101 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="mobile-card-view">
|
||||
<div class="mobile-card-list">
|
||||
@foreach (var row in Model)
|
||||
{
|
||||
<div class="mobile-data-card">
|
||||
<div class="mobile-card-header">
|
||||
<div class="mobile-card-icon" style="background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%);">
|
||||
<i class="bi bi-building"></i>
|
||||
</div>
|
||||
<div class="mobile-card-title">
|
||||
<h6>
|
||||
@row.CompanyName
|
||||
@if (row.IsDeleted) { <span class="badge bg-secondary ms-1">Deleted</span> }
|
||||
</h6>
|
||||
<small>
|
||||
@if (row.SmsDisabledByAdmin)
|
||||
{
|
||||
<span class="text-danger"><i class="bi bi-slash-circle me-1"></i>Admin-Disabled</span>
|
||||
}
|
||||
else if (row.SmsEnabled)
|
||||
{
|
||||
<span class="text-success"><i class="bi bi-chat-dots me-1"></i>SMS Enabled</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="text-muted">SMS Off</span>
|
||||
}
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-card-body">
|
||||
<div class="mobile-card-row">
|
||||
<span class="mobile-card-label">Terms</span>
|
||||
<span class="mobile-card-value">
|
||||
@{
|
||||
var dispAgreement = row.CurrentAgreement ?? row.LatestAgreement;
|
||||
}
|
||||
@if (row.CurrentAgreement != null)
|
||||
{
|
||||
<span class="badge bg-success">v@(row.CurrentAgreement.TermsVersion)</span>
|
||||
}
|
||||
else if (row.LatestAgreement != null)
|
||||
{
|
||||
<span class="badge bg-warning text-dark">Stale (v@(row.LatestAgreement.TermsVersion))</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="badge bg-light text-muted border">Never</span>
|
||||
}
|
||||
</span>
|
||||
</div>
|
||||
@if (dispAgreement != null)
|
||||
{
|
||||
<div class="mobile-card-row">
|
||||
<span class="mobile-card-label">Accepted By</span>
|
||||
<span class="mobile-card-value @(row.CurrentAgreement == null ? "text-muted" : "")">
|
||||
@dispAgreement.AgreedByUserName
|
||||
</span>
|
||||
</div>
|
||||
<div class="mobile-card-row">
|
||||
<span class="mobile-card-label">Accepted At</span>
|
||||
<span class="mobile-card-value @(row.CurrentAgreement == null ? "text-muted" : "")">
|
||||
@dispAgreement.AgreedAt.ToString("MM/dd/yy")
|
||||
</span>
|
||||
</div>
|
||||
}
|
||||
@if (row.AllAgreements.Count > 0)
|
||||
{
|
||||
<div class="mobile-card-row">
|
||||
<span class="mobile-card-label">History</span>
|
||||
<span class="mobile-card-value">
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#historyModal"
|
||||
data-company="@row.CompanyName"
|
||||
data-history="@System.Text.Json.JsonSerializer.Serialize(row.AllAgreements.Select(a => new {
|
||||
a.TermsVersion,
|
||||
a.AgreedByUserName,
|
||||
a.AgreedByUserId,
|
||||
AgreedAt = a.AgreedAt.ToString("MMM d, yyyy 'at' h:mm tt") + " UTC",
|
||||
IpAddress = a.IpAddress ?? "—",
|
||||
UserAgent = a.UserAgent ?? "—"
|
||||
}), new System.Text.Json.JsonSerializerOptions { PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase })"
|
||||
onclick="event.stopPropagation()">
|
||||
@row.AllAgreements.Count <i class="bi bi-clock-history ms-1"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover align-middle mb-0">
|
||||
<thead class="table-light">
|
||||
|
||||
Reference in New Issue
Block a user