Add invoice SMS notifications and customer intake kiosk
Invoice SMS:
- Send Invoice modal now prompts Email/SMS/Both based on customer contact data
- New /invoice/{token} customer-facing view page with full line items and pay button
- PublicViewToken (permanent) added to Invoice; separate from expiring PaymentLinkToken
- InvoiceSent SMS default template added; customizable via Notification Templates settings
- {{viewUrl}} placeholder documented in template editor
Customer Intake Kiosk:
- Tablet kiosk flow: Contact → Job → Terms/Signature → Confirmation
- Remote link mode for off-site customers (lighter form, no signature)
- KioskHub (AllowAnonymous SignalR) for staff-to-tablet push without login
- Staff activates tablet via cookie; sends remote link manually
- Submitted sessions create Customer + Job automatically; fires in-app notification
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
@model PowderCoating.Application.DTOs.Kiosk.SubmitKioskContactDto
|
||||
@{
|
||||
Layout = "~/Views/Shared/_KioskLayout.cshtml";
|
||||
ViewData["Title"] = "Your Information";
|
||||
var token = ViewBag.SessionToken as Guid? ?? Guid.Empty;
|
||||
}
|
||||
|
||||
<div class="kiosk-card">
|
||||
<h2 class="fw-bold mb-1" style="font-size:1.6rem;">Tell us about yourself</h2>
|
||||
<p class="text-muted mb-4">All fields are required.</p>
|
||||
|
||||
<form method="post" action="/Kiosk/Intake/@token/Contact" id="contactForm">
|
||||
@Html.AntiForgeryToken()
|
||||
|
||||
<div class="row g-3">
|
||||
<div class="col-sm-6">
|
||||
<label asp-for="FirstName" class="form-label">First Name</label>
|
||||
<input asp-for="FirstName" class="form-control" autocomplete="given-name"
|
||||
autocapitalize="words" spellcheck="false" placeholder="Jane" />
|
||||
<span asp-validation-for="FirstName" class="text-danger small"></span>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<label asp-for="LastName" class="form-label">Last Name</label>
|
||||
<input asp-for="LastName" class="form-control" autocomplete="family-name"
|
||||
autocapitalize="words" spellcheck="false" placeholder="Smith" />
|
||||
<span asp-validation-for="LastName" class="text-danger small"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<label asp-for="Phone" class="form-label">Phone Number</label>
|
||||
<input asp-for="Phone" class="form-control" type="tel" inputmode="tel"
|
||||
autocomplete="tel" placeholder="(555) 555-0100" />
|
||||
<span asp-validation-for="Phone" class="text-danger small"></span>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<label asp-for="Email" class="form-label">Email Address</label>
|
||||
<input asp-for="Email" class="form-control" type="email" inputmode="email"
|
||||
autocomplete="email" placeholder="jane@example.com" />
|
||||
<span asp-validation-for="Email" class="text-danger small"></span>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 p-3 rounded-3" style="background:#f1f5f9;">
|
||||
<div class="form-check">
|
||||
<input asp-for="IsReturningCustomer" class="form-check-input" type="checkbox" />
|
||||
<label asp-for="IsReturningCustomer" class="form-check-label">
|
||||
I've been a customer before
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<button type="submit" class="btn btn-primary kiosk-btn">
|
||||
Continue <i class="bi bi-arrow-right ms-2"></i>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
Reference in New Issue
Block a user