diff --git a/src/PowderCoating.Web/BackgroundServices/SubscriptionExpiryBackgroundService.cs b/src/PowderCoating.Web/BackgroundServices/SubscriptionExpiryBackgroundService.cs index 6b0e0ea..8d43126 100644 --- a/src/PowderCoating.Web/BackgroundServices/SubscriptionExpiryBackgroundService.cs +++ b/src/PowderCoating.Web/BackgroundServices/SubscriptionExpiryBackgroundService.cs @@ -67,9 +67,9 @@ public class SubscriptionExpiryBackgroundService : BackgroundService } /// - /// Opens a DI scope, queries non-Stripe-managed companies with active or grace-period subscriptions, - /// and calls for each. A single SaveChangesAsync at the - /// end batches all status mutations into one round-trip. Errors are caught to keep the loop alive. + /// Opens a DI scope, queries non-Stripe-managed (trial) companies with active or grace-period + /// subscriptions, and calls for each. Each company is saved + /// individually so a single failure does not prevent other companies from being updated. /// private async Task RunAsync(CancellationToken ct) { @@ -103,15 +103,27 @@ public class SubscriptionExpiryBackgroundService : BackgroundService _logger.LogDebug("Found {Count} companies to evaluate.", companies.Count); + // All companies reaching this point have no StripeSubscriptionId — they are trials. + // Paid subscribers are managed by Stripe and filtered out above. + var effectiveGraceDays = gracePeriodAppliesToTrials ? gracePeriodDays : 0; + foreach (var company in companies) { if (ct.IsCancellationRequested) break; - var isTrial = string.IsNullOrEmpty(company.StripeSubscriptionId); - var effectiveGraceDays = isTrial && !gracePeriodAppliesToTrials ? 0 : gracePeriodDays; - await ProcessCompanyAsync(db, emailService, adminNotification, company, today, effectiveGraceDays, ct); + try + { + await ProcessCompanyAsync(db, emailService, adminNotification, company, today, effectiveGraceDays, ct); + await db.SaveChangesAsync(ct); + } + catch (Exception ex) + { + _logger.LogError(ex, + "Failed to process subscription expiry for company {Id} ({Name}). Status change was not persisted.", + company.Id, company.CompanyName); + // Clear EF tracked changes so bad state does not bleed into the next company. + db.ChangeTracker.Clear(); + } } - - await db.SaveChangesAsync(ct); } catch (Exception ex) { @@ -121,10 +133,15 @@ public class SubscriptionExpiryBackgroundService : BackgroundService /// /// Evaluates a single company and performs any required status transitions or reminder sends. - /// Transition logic: Active past end date → GracePeriod; GracePeriod past grace deadline → Expired + deactivated. + /// Transition logic: + /// + /// Active past end date, grace days = 0 → Expired + deactivated immediately (trials). + /// Active past end date, grace days > 0 → GracePeriod + grace-period email. + /// GracePeriod past grace deadline → Expired + deactivated. + /// /// Reminder emails at offsets are sent only while the company is still Active. - /// Platform admin is notified asynchronously (fire-and-forget) for both grace period start and full expiry - /// so that operator action can be taken without delaying the main processing loop. + /// Platform admin is notified asynchronously (fire-and-forget) so that operator action can be taken + /// without delaying the main processing loop. /// private async Task ProcessCompanyAsync( ApplicationDbContext db, @@ -153,35 +170,55 @@ public class SubscriptionExpiryBackgroundService : BackgroundService await WriteAuditLogAsync(db, company, $"Auto-expired: grace period ended {gracePeriodDays} days after subscription end {endDate:d}."); - // Notify platform admin _ = adminNotification.NotifyCompanyExpiredAsync( company.Id, company.CompanyName, company.PrimaryContactEmail ?? string.Empty, expiredDate); } else if (company.SubscriptionStatus == SubscriptionStatus.Active && today > endDate) { - _logger.LogInformation( - "Company {Id} ({Name}) subscription ended. Entering grace period.", - company.Id, company.CompanyName); + if (gracePeriodDays == 0) + { + // No grace period configured — expire immediately without going through GracePeriod. + // Trials always land here since gracePeriodAppliesToTrials defaults to false. + _logger.LogInformation( + "Company {Id} ({Name}) subscription ended with no grace period. Marking Expired and deactivating.", + company.Id, company.CompanyName); - company.SubscriptionStatus = SubscriptionStatus.GracePeriod; - company.UpdatedAt = DateTime.UtcNow; - company.UpdatedBy = "System"; + company.SubscriptionStatus = SubscriptionStatus.Expired; + company.IsActive = false; + company.UpdatedAt = DateTime.UtcNow; + company.UpdatedBy = "System"; - await WriteAuditLogAsync(db, company, - $"Auto-moved to GracePeriod: subscription ended {endDate:d}. Grace period expires {expiredDate:d}."); + await WriteAuditLogAsync(db, company, + $"Auto-expired: subscription ended {endDate:d} with no grace period."); - // Send "grace period started" email to company immediately - await SendEmailIfNotSentAsync(db, emailService, company, today, - NotificationType.SubscriptionExpiryReminder, - daysBeforeExpiry: 0, - gracePeriodDays, - ct); + _ = adminNotification.NotifyCompanyExpiredAsync( + company.Id, company.CompanyName, + company.PrimaryContactEmail ?? string.Empty, endDate); + } + else + { + _logger.LogInformation( + "Company {Id} ({Name}) subscription ended. Entering {Days}-day grace period.", + company.Id, company.CompanyName, gracePeriodDays); - // Notify platform admin - _ = adminNotification.NotifyCompanyGracePeriodAsync( - company.Id, company.CompanyName, - company.PrimaryContactEmail ?? string.Empty, expiredDate); + company.SubscriptionStatus = SubscriptionStatus.GracePeriod; + company.UpdatedAt = DateTime.UtcNow; + company.UpdatedBy = "System"; + + await WriteAuditLogAsync(db, company, + $"Auto-moved to GracePeriod: subscription ended {endDate:d}. Grace period expires {expiredDate:d}."); + + await SendEmailIfNotSentAsync(db, emailService, company, today, + NotificationType.SubscriptionExpiryReminder, + daysBeforeExpiry: 0, + gracePeriodDays, + ct); + + _ = adminNotification.NotifyCompanyGracePeriodAsync( + company.Id, company.CompanyName, + company.PrimaryContactEmail ?? string.Empty, expiredDate); + } } // ── Reminder emails (only while still Active) ──────────────────── diff --git a/src/PowderCoating.Web/Views/Accounts/Ledger.cshtml b/src/PowderCoating.Web/Views/Accounts/Ledger.cshtml index 810a1d9..ebae4a0 100644 --- a/src/PowderCoating.Web/Views/Accounts/Ledger.cshtml +++ b/src/PowderCoating.Web/Views/Accounts/Ledger.cshtml @@ -1,8 +1,8 @@ -@model PowderCoating.Application.DTOs.Accounting.AccountLedgerDto +@model PowderCoating.Application.DTOs.Accounting.AccountLedgerDto @using PowderCoating.Core.Enums @{ - ViewData["Title"] = $"Ledger — {Model.AccountNumber} {Model.Name}"; + ViewData["Title"] = $"Ledger - {Model.AccountNumber} {Model.Name}"; ViewData["PageIcon"] = "bi-journal-text"; ViewData["PageHelpTitle"] = "Account Ledger"; ViewData["PageHelpContent"] = "A chronological list of every transaction posted to this account. Click any Reference to open the source record. Debit increases asset and expense accounts; credit increases liability, equity, and revenue accounts. Use the date range or quick buttons (This Month, YTD, etc.) to narrow the view."; diff --git a/src/PowderCoating.Web/Views/BankReconciliations/Report.cshtml b/src/PowderCoating.Web/Views/BankReconciliations/Report.cshtml index 11dc723..3803175 100644 --- a/src/PowderCoating.Web/Views/BankReconciliations/Report.cshtml +++ b/src/PowderCoating.Web/Views/BankReconciliations/Report.cshtml @@ -1,7 +1,7 @@ -@model PowderCoating.Core.Entities.BankReconciliation +@model PowderCoating.Core.Entities.BankReconciliation @using PowderCoating.Web.Controllers @{ - ViewData["Title"] = $"Reconciliation Report – {Model.Account?.Name}"; + ViewData["Title"] = $"Reconciliation Report - {Model.Account?.Name}"; var clearedDeposits = ViewBag.ClearedDeposits as IEnumerable ?? Enumerable.Empty(); var clearedPayments = ViewBag.ClearedPayments as List ?? new(); } diff --git a/src/PowderCoating.Web/Views/Budgets/Edit.cshtml b/src/PowderCoating.Web/Views/Budgets/Edit.cshtml index 1603336..cb4447c 100644 --- a/src/PowderCoating.Web/Views/Budgets/Edit.cshtml +++ b/src/PowderCoating.Web/Views/Budgets/Edit.cshtml @@ -1,8 +1,8 @@ -@using PowderCoating.Web.Controllers +@using PowderCoating.Web.Controllers @model BudgetCreateVm @{ - ViewData["Title"] = $"Edit Budget — {Model.Name}"; + ViewData["Title"] = $"Edit Budget - {Model.Name}"; ViewData["PageIcon"] = "bi-pencil"; var months = new[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; } diff --git a/src/PowderCoating.Web/Views/CompanySettings/EditTemplate.cshtml b/src/PowderCoating.Web/Views/CompanySettings/EditTemplate.cshtml index cd7a059..3da6726 100644 --- a/src/PowderCoating.Web/Views/CompanySettings/EditTemplate.cshtml +++ b/src/PowderCoating.Web/Views/CompanySettings/EditTemplate.cshtml @@ -1,6 +1,6 @@ -@model PowderCoating.Application.DTOs.Notification.NotificationTemplateDto +@model PowderCoating.Application.DTOs.Notification.NotificationTemplateDto @{ - ViewData["Title"] = $"Edit Template — {Model.DisplayName}"; + ViewData["Title"] = $"Edit Template - {Model.DisplayName}"; ViewData["PageIcon"] = "bi-envelope-gear"; var placeholders = ViewBag.Placeholders as List<(string Placeholder, string Description)> ?? new List<(string, string)>(); diff --git a/src/PowderCoating.Web/Views/Customers/Statement.cshtml b/src/PowderCoating.Web/Views/Customers/Statement.cshtml index a911ffc..166a8b3 100644 --- a/src/PowderCoating.Web/Views/Customers/Statement.cshtml +++ b/src/PowderCoating.Web/Views/Customers/Statement.cshtml @@ -1,6 +1,6 @@ -@model PowderCoating.Application.DTOs.Accounting.CustomerStatementDto +@model PowderCoating.Application.DTOs.Accounting.CustomerStatementDto @{ - ViewData["Title"] = $"Statement – {Model.CustomerName}"; + ViewData["Title"] = $"Statement - {Model.CustomerName}"; }
diff --git a/src/PowderCoating.Web/Views/Help/CustomFormulaTemplates.cshtml b/src/PowderCoating.Web/Views/Help/CustomFormulaTemplates.cshtml index 40f04ed..029d1c0 100644 --- a/src/PowderCoating.Web/Views/Help/CustomFormulaTemplates.cshtml +++ b/src/PowderCoating.Web/Views/Help/CustomFormulaTemplates.cshtml @@ -1,5 +1,5 @@ -@{ - ViewData["Title"] = "Custom Formula Item Templates — Help"; +@{ + ViewData["Title"] = "Custom Formula Item Templates - Help"; }
diff --git a/src/PowderCoating.Web/Views/Inventory/Label.cshtml b/src/PowderCoating.Web/Views/Inventory/Label.cshtml index 7235128..ea8b020 100644 --- a/src/PowderCoating.Web/Views/Inventory/Label.cshtml +++ b/src/PowderCoating.Web/Views/Inventory/Label.cshtml @@ -1,6 +1,6 @@ -@model PowderCoating.Application.DTOs.Inventory.InventoryItemDto +@model PowderCoating.Application.DTOs.Inventory.InventoryItemDto @{ - ViewData["Title"] = $"Label — {Model.Name}"; + ViewData["Title"] = $"Label - {Model.Name}"; Layout = null; // standalone print page } diff --git a/src/PowderCoating.Web/Views/Inventory/Scan.cshtml b/src/PowderCoating.Web/Views/Inventory/Scan.cshtml index fae5807..0e45f55 100644 --- a/src/PowderCoating.Web/Views/Inventory/Scan.cshtml +++ b/src/PowderCoating.Web/Views/Inventory/Scan.cshtml @@ -1,4 +1,4 @@ -@using PowderCoating.Application.DTOs.Inventory +@using PowderCoating.Application.DTOs.Inventory @using PowderCoating.Web.Controllers @{ var item = ViewBag.ItemDto as InventoryItemDto; @@ -6,7 +6,7 @@ var otherJobs = ViewBag.OtherJobs as List ?? new(); var preselectedJobId = ViewBag.PreselectedJobId as int?; var scanError = ViewBag.ScanError as string; - ViewData["Title"] = $"Log Usage — {item?.Name}"; + ViewData["Title"] = $"Log Usage - {item?.Name}"; Layout = null; // mobile-first standalone page } diff --git a/src/PowderCoating.Web/Views/Jobs/EditItems.cshtml b/src/PowderCoating.Web/Views/Jobs/EditItems.cshtml index 5aa2981..ae37303 100644 --- a/src/PowderCoating.Web/Views/Jobs/EditItems.cshtml +++ b/src/PowderCoating.Web/Views/Jobs/EditItems.cshtml @@ -1,8 +1,8 @@ -@model PowderCoating.Application.DTOs.Job.JobEditItemsViewModel +@model PowderCoating.Application.DTOs.Job.JobEditItemsViewModel @using PowderCoating.Core.Entities @{ - ViewData["Title"] = $"Edit Items — {Model.JobNumber}"; + ViewData["Title"] = $"Edit Items - {Model.JobNumber}"; ViewData["PageIcon"] = "bi-list-check"; } diff --git a/src/PowderCoating.Web/Views/Jobs/Intake.cshtml b/src/PowderCoating.Web/Views/Jobs/Intake.cshtml index 2fd937c..18163ab 100644 --- a/src/PowderCoating.Web/Views/Jobs/Intake.cshtml +++ b/src/PowderCoating.Web/Views/Jobs/Intake.cshtml @@ -1,7 +1,7 @@ -@model (PowderCoating.Application.DTOs.Job.JobDto Job, PowderCoating.Application.DTOs.Job.IntakeJobDto Form) +@model (PowderCoating.Application.DTOs.Job.JobDto Job, PowderCoating.Application.DTOs.Job.IntakeJobDto Form) @{ - ViewData["Title"] = $"Part Intake — {Model.Job.JobNumber}"; + ViewData["Title"] = $"Part Intake - {Model.Job.JobNumber}"; ViewData["PageIcon"] = "bi-box-seam"; var job = Model.Job; var form = Model.Form; diff --git a/src/PowderCoating.Web/Views/PurchaseOrders/Receive.cshtml b/src/PowderCoating.Web/Views/PurchaseOrders/Receive.cshtml index 0833442..67820a1 100644 --- a/src/PowderCoating.Web/Views/PurchaseOrders/Receive.cshtml +++ b/src/PowderCoating.Web/Views/PurchaseOrders/Receive.cshtml @@ -1,8 +1,8 @@ -@using PowderCoating.Application.DTOs.PurchaseOrder +@using PowderCoating.Application.DTOs.PurchaseOrder @model ReceivePurchaseOrderDto @{ - ViewData["Title"] = $"Receive Goods — {ViewBag.PoNumber}"; + ViewData["Title"] = $"Receive Goods - {ViewBag.PoNumber}"; int poId = (int)ViewBag.PoId; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step1.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step1.cshtml index 67d5b5f..51b39a9 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step1.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step1.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep1Dto @{ - ViewData["Title"] = "Setup Wizard — Company Profile"; + ViewData["Title"] = "Setup Wizard - Company Profile"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 1; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step10.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step10.cshtml index 8ec677a..383a5c5 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step10.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step10.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep9Dto @{ - ViewData["Title"] = "Setup Wizard — Team Members"; + ViewData["Title"] = "Setup Wizard - Team Members"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 10; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step11.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step11.cshtml index 1a77663..a4502de 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step11.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step11.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep6Dto @{ - ViewData["Title"] = "Setup Wizard — Chart of Accounts"; + ViewData["Title"] = "Setup Wizard - Chart of Accounts"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 11; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step12.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step12.cshtml index 8067146..f12af13 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step12.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step12.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep10Dto @{ - ViewData["Title"] = "Setup Wizard — Vendors & Suppliers"; + ViewData["Title"] = "Setup Wizard - Vendors & Suppliers"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 12; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step13.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step13.cshtml index 91c7ee0..d3ba445 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step13.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step13.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep8Dto @{ - ViewData["Title"] = "Setup Wizard — Inventory / Powder Colors"; + ViewData["Title"] = "Setup Wizard - Inventory / Powder Colors"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 13; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step14.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step14.cshtml index 6216473..f5573db 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step14.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step14.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardOvensStepDto @{ - ViewData["Title"] = "Setup Wizard — Equipment & Ovens"; + ViewData["Title"] = "Setup Wizard - Equipment & Ovens"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 14; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step15.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step15.cshtml index 9460484..69be7f8 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step15.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step15.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardPricingTiersStepDto @{ - ViewData["Title"] = "Setup Wizard — Pricing Tiers"; + ViewData["Title"] = "Setup Wizard - Pricing Tiers"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 15; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step16.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step16.cshtml index 14b7e0a..6c913a8 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step16.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step16.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardCatalogStepDto @{ - ViewData["Title"] = "Setup Wizard — Service Catalog"; + ViewData["Title"] = "Setup Wizard - Service Catalog"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 16; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step17.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step17.cshtml index f59fe8f..6680423 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step17.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step17.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep7Dto @{ - ViewData["Title"] = "Setup Wizard — Notifications"; + ViewData["Title"] = "Setup Wizard - Notifications"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 17; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step18.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step18.cshtml index 860befa..4e5ed64 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step18.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step18.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep9Dto @{ - ViewData["Title"] = "Setup Wizard — Team Members"; + ViewData["Title"] = "Setup Wizard - Team Members"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 18; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step2.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step2.cshtml index e065a84..395a856 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step2.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step2.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep2QbDto @{ - ViewData["Title"] = "Setup Wizard — QuickBooks Migration"; + ViewData["Title"] = "Setup Wizard - QuickBooks Migration"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 2; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step3.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step3.cshtml index 639d80c..0643a75 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step3.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step3.cshtml @@ -1,8 +1,8 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @using PowderCoating.Core.Enums @model WizardStep2Dto @{ - ViewData["Title"] = "Setup Wizard — Operating Costs"; + ViewData["Title"] = "Setup Wizard - Operating Costs"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 3; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step4.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step4.cshtml index d2049dd..c1fa630 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step4.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step4.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardOvensStepDto @{ - ViewData["Title"] = "Setup Wizard — Shop Equipment"; + ViewData["Title"] = "Setup Wizard - Shop Equipment"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 4; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step5.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step5.cshtml index ca96a31..03ade7f 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step5.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step5.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep3Dto @{ - ViewData["Title"] = "Setup Wizard — Document Numbering"; + ViewData["Title"] = "Setup Wizard - Document Numbering"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 5; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step6.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step6.cshtml index ab53642..38f360b 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step6.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step6.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep5Dto @{ - ViewData["Title"] = "Setup Wizard — Job Settings"; + ViewData["Title"] = "Setup Wizard - Job Settings"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 6; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step7.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step7.cshtml index a017934..9e3feeb 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step7.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step7.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep4Dto @{ - ViewData["Title"] = "Setup Wizard — Payment Terms"; + ViewData["Title"] = "Setup Wizard - Payment Terms"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 7; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step8.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step8.cshtml index d07c209..d8f35b3 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step8.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step8.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardPricingTiersStepDto @{ - ViewData["Title"] = "Setup Wizard — Pricing Tiers"; + ViewData["Title"] = "Setup Wizard - Pricing Tiers"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 8; } diff --git a/src/PowderCoating.Web/Views/SetupWizard/Step9.cshtml b/src/PowderCoating.Web/Views/SetupWizard/Step9.cshtml index 6c958d2..b13dd50 100644 --- a/src/PowderCoating.Web/Views/SetupWizard/Step9.cshtml +++ b/src/PowderCoating.Web/Views/SetupWizard/Step9.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Application.DTOs.Wizard +@using PowderCoating.Application.DTOs.Wizard @model WizardStep7Dto @{ - ViewData["Title"] = "Setup Wizard — Notifications"; + ViewData["Title"] = "Setup Wizard - Notifications"; var progress = ViewBag.Progress as WizardProgressDto ?? new WizardProgressDto(); int step = ViewBag.Step as int? ?? 5; } diff --git a/src/PowderCoating.Web/Views/Shared/_KioskLayout.cshtml b/src/PowderCoating.Web/Views/Shared/_KioskLayout.cshtml index b4bdc10..b617982 100644 --- a/src/PowderCoating.Web/Views/Shared/_KioskLayout.cshtml +++ b/src/PowderCoating.Web/Views/Shared/_KioskLayout.cshtml @@ -1,4 +1,4 @@ - + diff --git a/src/PowderCoating.Web/Views/StripeEvents/Details.cshtml b/src/PowderCoating.Web/Views/StripeEvents/Details.cshtml index 670ac31..91d000a 100644 --- a/src/PowderCoating.Web/Views/StripeEvents/Details.cshtml +++ b/src/PowderCoating.Web/Views/StripeEvents/Details.cshtml @@ -1,7 +1,7 @@ -@using PowderCoating.Core.Entities +@using PowderCoating.Core.Entities @model StripeWebhookEvent @{ - ViewData["Title"] = $"Webhook Event – {Model.EventId}"; + ViewData["Title"] = $"Webhook Event - {Model.EventId}"; var statusClass = Model.Status switch { StripeWebhookEventStatus.Processed => "success", diff --git a/src/PowderCoating.Web/Views/SubscriptionManagement/Manage.cshtml b/src/PowderCoating.Web/Views/SubscriptionManagement/Manage.cshtml index b885df8..a5f20c3 100644 --- a/src/PowderCoating.Web/Views/SubscriptionManagement/Manage.cshtml +++ b/src/PowderCoating.Web/Views/SubscriptionManagement/Manage.cshtml @@ -2,7 +2,7 @@ @using PowderCoating.Core.Enums @model Company @{ - ViewData["Title"] = $"Manage – {Model.CompanyName}"; + ViewData["Title"] = $"Manage - {Model.CompanyName}"; var planConfigs = (dynamic)ViewBag.PlanConfigs; string PlanName(int plan) diff --git a/src/PowderCoating.Web/Views/Vendors/Statement.cshtml b/src/PowderCoating.Web/Views/Vendors/Statement.cshtml index 6074408..bd41d51 100644 --- a/src/PowderCoating.Web/Views/Vendors/Statement.cshtml +++ b/src/PowderCoating.Web/Views/Vendors/Statement.cshtml @@ -1,6 +1,6 @@ -@model PowderCoating.Application.DTOs.Accounting.VendorStatementDto +@model PowderCoating.Application.DTOs.Accounting.VendorStatementDto @{ - ViewData["Title"] = $"Statement – {Model.VendorName}"; + ViewData["Title"] = $"Statement - {Model.VendorName}"; }