@model PowderCoating.Application.DTOs.Common.PagedResult @{ ViewData["Title"] = "Email & SMS Log"; ViewData["PageIcon"] = "bi-bell-history"; var sortCol = ViewBag.SortColumn as string ?? "SentAt"; var sortDir = ViewBag.SortDirection as string ?? "desc"; string NextDir(string col) => sortCol == col && sortDir == "asc" ? "desc" : "asc"; string SortIcon(string col) => sortCol == col ? (sortDir == "asc" ? "bi-sort-up" : "bi-sort-down") : "bi-arrow-down-up"; var sentCount = Model.Items.Count(x => x.Status == PowderCoating.Core.Enums.NotificationStatus.Sent); var failedCount = Model.Items.Count(x => x.Status == PowderCoating.Core.Enums.NotificationStatus.Failed); var skippedCount = Model.Items.Count(x => x.Status == PowderCoating.Core.Enums.NotificationStatus.Skipped); var filteredJobId = ViewBag.JobId as int?; var filteredJobNumber = filteredJobId.HasValue ? Model.Items.FirstOrDefault(i => i.JobId == filteredJobId)?.JobNumber : null; }
@if (filteredJobId.HasValue) { Back to Job }
@if (filteredJobId.HasValue) {
Showing notifications for job @(filteredJobNumber ?? $"#{filteredJobId}"). View all notifications
}
@sentCount
Sent (this page)
@failedCount
Failed (this page)
@skippedCount
Skipped (this page)
@if (filteredJobId.HasValue) { }
@if (!Model.Items.Any()) {

No notification records found.

} else {
@foreach (var item in Model.Items) {
@item.RecipientName
@item.Recipient
Type @item.NotificationTypeDisplay
Sent @item.SentAt.Tz(ViewBag.CompanyTimeZone as string).ToString("MM/dd HH:mm")
@if (item.JobId.HasValue) {
Job @item.JobNumber
} else if (item.QuoteId.HasValue) {
Quote @item.QuoteNumber
}
Status @{ var (mStatusBadge, mStatusIcon) = item.Status switch { PowderCoating.Core.Enums.NotificationStatus.Sent => ("bg-success", "bi-check-circle"), PowderCoating.Core.Enums.NotificationStatus.Failed => ("bg-danger", "bi-x-circle"), _ => ("bg-secondary", "bi-dash-circle") }; } @item.StatusDisplay
}
@foreach (var item in Model.Items) { }
Sent At Channel Type Recipient Related Status
@item.SentAt.Tz(ViewBag.CompanyTimeZone as string).ToString("MM/dd/yyyy HH:mm") @if (item.Channel == PowderCoating.Core.Enums.NotificationChannel.Email) { Email } else { SMS } @item.NotificationTypeDisplay
@item.RecipientName
@item.Recipient
@if (item.JobId.HasValue) { @item.JobNumber } else if (item.QuoteId.HasValue) { @item.QuoteNumber } else if (item.CustomerName != null) { @item.CustomerName } @{ var (badgeClass, icon) = item.Status switch { PowderCoating.Core.Enums.NotificationStatus.Sent => ("bg-success", "bi-check-circle"), PowderCoating.Core.Enums.NotificationStatus.Failed => ("bg-danger", "bi-x-circle"), _ => ("bg-secondary", "bi-dash-circle") }; } @item.StatusDisplay @if (!string.IsNullOrEmpty(item.ErrorMessage)) { }
}
@await Html.PartialAsync("_Pagination", Model, new ViewDataDictionary(ViewData) { { "routeValues", new { searchTerm = ViewBag.SearchTerm, channelFilter = ViewBag.ChannelFilter, statusFilter = ViewBag.StatusFilter, typeFilter = ViewBag.TypeFilter, jobId = filteredJobId, sortColumn = sortCol, sortDirection = sortDir }} })