Restore all zeroed views + add bulk gift certificate creation
The HTML entity sweep script had a bug where it wrote empty files for any
view that contained no target Unicode characters, zeroing out 215 view files.
All views restored from the pre-sweep commit (cefdf3e).
Bulk gift certificate feature:
- BulkCreateGiftCertificateDto with Quantity (1-500), Amount, Reason, Expiry, Notes
- GenerateBulkGiftCertificatePdfAsync on IPdfService / PdfService: one Letter page
per cert, reusing the same purple/gold branded ComposeGiftCertificateContent helper
- GiftCertificatesController: BulkCreate GET/POST, BulkResult GET, BulkDownloadPdf POST
- Views: BulkCreate.cshtml (form with live total preview), BulkResult.cshtml (table +
Download All PDF button that POSTs cert IDs to avoid URL length limits)
- gift-certificate-bulk.js: live preview + spinner/disable on submit
- Index.cshtml: Bulk Create button added alongside New Certificate
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
@{
|
||||
ViewData["Title"] = "Shop Workers";
|
||||
}
|
||||
|
||||
<div class="d-flex align-items-center gap-2 mb-3">
|
||||
<a asp-controller="Help" asp-action="Index" class="btn btn-sm btn-outline-secondary"><i class="bi bi-arrow-left"></i></a>
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb mb-0">
|
||||
<li class="breadcrumb-item"><a asp-controller="Help" asp-action="Index">Help</a></li>
|
||||
<li class="breadcrumb-item active">Shop Workers</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-9">
|
||||
|
||||
<section id="overview" class="mb-5">
|
||||
<h2 class="h4 fw-bold border-bottom pb-2 mb-3">
|
||||
<i class="bi bi-info-circle text-primary me-2"></i>Overview
|
||||
</h2>
|
||||
<p>
|
||||
Shop Workers are the people who do the hands-on work in your facility — sandblasters, coaters,
|
||||
maskers, oven operators, and supervisors. Adding your workers to the system lets you assign them
|
||||
to jobs and maintenance tasks, giving you a clear picture of who is working on what at any time.
|
||||
</p>
|
||||
<p>
|
||||
Shop Workers are separate from system user accounts. A worker does not need to log into the
|
||||
system — they are simply a record that can be assigned to work. If a worker also needs to log
|
||||
in and update job statuses themselves, an Administrator can create a linked user account for
|
||||
them with the <em>Shop Floor</em> role.
|
||||
</p>
|
||||
<p>
|
||||
Find Shop Workers under <strong>Operations › Shop Workers</strong> in the sidebar.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="adding-a-worker" class="mb-5">
|
||||
<h2 class="h4 fw-bold border-bottom pb-2 mb-3">
|
||||
<i class="bi bi-person-plus text-primary me-2"></i>Adding a Worker
|
||||
</h2>
|
||||
<p>To add a new shop worker:</p>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Go to <strong>Operations › Shop Workers</strong> and click <strong>New Worker</strong>.</li>
|
||||
<li class="mb-2">
|
||||
Fill in the worker's details:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Name</strong> — the worker's full name as it should appear on job assignments.</li>
|
||||
<li><strong>Role</strong> — select the role that best describes their primary function (see below).</li>
|
||||
<li><strong>Phone</strong> — optional, useful for supervisors to have on file.</li>
|
||||
<li><strong>Email</strong> — optional, used if the worker also has a system login.</li>
|
||||
<li><strong>Notes</strong> — any relevant information, such as certifications, shift preferences, or specialties.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Ensure <strong>Active</strong> is checked (it is on by default).</li>
|
||||
<li class="mb-2">Click <strong>Save Worker</strong>.</li>
|
||||
</ol>
|
||||
<p>
|
||||
Once saved, the worker will appear in the assignment dropdowns on the Job Create and Edit forms.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="worker-roles" class="mb-5">
|
||||
<h2 class="h4 fw-bold border-bottom pb-2 mb-3">
|
||||
<i class="bi bi-tags text-primary me-2"></i>Worker Roles
|
||||
</h2>
|
||||
<p>
|
||||
Each worker is assigned one of the following roles. The role is a label — it helps you pick the
|
||||
right person for a job but does not restrict what a worker can be assigned to.
|
||||
</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th style="width:25%">Role</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><span class="badge bg-secondary">General Labor</span></td>
|
||||
<td>
|
||||
Versatile workers who assist across multiple areas of the shop — loading and unloading,
|
||||
racking parts, clean-up, and general support tasks. Not specialized in a single process.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="badge bg-warning text-dark">Sandblaster</span></td>
|
||||
<td>
|
||||
Operates the sandblasting or media-blasting equipment to prepare metal surfaces for
|
||||
coating. Responsible for achieving the correct surface profile and ensuring all rust,
|
||||
paint, and contamination is removed.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="badge bg-primary">Coater</span></td>
|
||||
<td>
|
||||
Applies powder coating using an electrostatic spray gun. Responsible for even coverage,
|
||||
correct mil thickness, and minimizing overspray and waste. Often the most skilled
|
||||
technical role on the floor.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="badge bg-info text-dark">Masker</span></td>
|
||||
<td>
|
||||
Applies masking tape, plugs, and caps to protect threads, bearing surfaces, and areas
|
||||
that must not be coated. Attention to detail is critical — missed masking means rework.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="badge bg-success">Quality Control</span></td>
|
||||
<td>
|
||||
Inspects finished parts for adhesion, color consistency, coverage, and surface defects
|
||||
before the job is marked as complete. May also handle pre-coat inspection after
|
||||
sandblasting.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="badge bg-danger">Oven Operator</span></td>
|
||||
<td>
|
||||
Loads parts into the curing oven, sets correct temperatures and cure times for the
|
||||
powder being used, monitors the cure cycle, and unloads parts safely after cooling.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="badge bg-dark">Supervisor</span></td>
|
||||
<td>
|
||||
Oversees day-to-day shop floor operations, assigns tasks to other workers, ensures
|
||||
jobs are progressing on schedule, and handles escalations. May also handle customer
|
||||
communication for production updates.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="badge bg-secondary">Maintenance</span></td>
|
||||
<td>
|
||||
Responsible for keeping equipment running — performing scheduled preventive maintenance,
|
||||
troubleshooting breakdowns, and coordinating with external service technicians when
|
||||
needed.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="assigning-to-jobs" class="mb-5">
|
||||
<h2 class="h4 fw-bold border-bottom pb-2 mb-3">
|
||||
<i class="bi bi-briefcase text-primary me-2"></i>Assigning Workers to Jobs
|
||||
</h2>
|
||||
<p>
|
||||
Each job can have one worker assigned to it as the primary responsible person. This is the
|
||||
worker who owns the job from start to finish — typically a coater or supervisor.
|
||||
</p>
|
||||
<p>To assign a worker when creating or editing a job:</p>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-1">Open the job's Create or Edit form.</li>
|
||||
<li class="mb-1">Scroll down to the <strong>Assignment</strong> section.</li>
|
||||
<li class="mb-1">Select a worker from the <strong>Assigned Worker</strong> dropdown. Only active workers are listed.</li>
|
||||
<li class="mb-1">Save the job.</li>
|
||||
</ol>
|
||||
<p>
|
||||
The assigned worker's name appears on the job list view, on the job detail page, and in any
|
||||
reports filtered by worker.
|
||||
</p>
|
||||
<p>
|
||||
Workers can also be assigned to <strong>maintenance tasks</strong> on equipment. See the
|
||||
<a asp-controller="Help" asp-action="Equipment" class="text-decoration-none">Equipment & Maintenance</a>
|
||||
help page for details.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
If a worker you want to assign does not appear in the dropdown, check that their record is
|
||||
marked as <strong>Active</strong>. Inactive workers are hidden from assignment lists.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="deactivating-a-worker" class="mb-5">
|
||||
<h2 class="h4 fw-bold border-bottom pb-2 mb-3">
|
||||
<i class="bi bi-person-dash text-primary me-2"></i>Deactivating a Worker
|
||||
</h2>
|
||||
<p>
|
||||
When a worker leaves the shop or is no longer available for assignment, deactivate their record
|
||||
rather than deleting it. Deactivating preserves the history of all jobs they were assigned to,
|
||||
while removing them from the active assignment dropdowns so they cannot be accidentally selected
|
||||
for new work.
|
||||
</p>
|
||||
<p>To deactivate a worker:</p>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-1">Open the worker's Details or Edit page.</li>
|
||||
<li class="mb-1">Uncheck the <strong>Active</strong> checkbox.</li>
|
||||
<li class="mb-1">Click <strong>Save</strong>.</li>
|
||||
</ol>
|
||||
<p>
|
||||
Alternatively, use the <strong>Delete</strong> button on the Details page to perform a soft
|
||||
delete, which has the same effect.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-secondary d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-info-circle flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
If a worker currently has open jobs assigned to them, reassign those jobs first before
|
||||
deactivating the worker — so the jobs remain clearly owned and nothing falls through the cracks.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-3 d-none d-lg-block">
|
||||
@{ await Html.RenderPartialAsync("_HelpNav"); }
|
||||
<div class="card border-0 shadow-sm sticky-top" style="top:80px">
|
||||
<div class="card-header bg-transparent fw-semibold small text-muted text-uppercase" style="letter-spacing:.05em; font-size:.7rem;">On this page</div>
|
||||
<div class="card-body p-0">
|
||||
<nav class="nav flex-column">
|
||||
<a class="nav-link py-1 px-3 small text-body" href="#overview">Overview</a>
|
||||
<a class="nav-link py-1 px-3 small text-body" href="#adding-a-worker">Adding a Worker</a>
|
||||
<a class="nav-link py-1 px-3 small text-body" href="#worker-roles">Worker Roles</a>
|
||||
<a class="nav-link py-1 px-3 small text-body" href="#assigning-to-jobs">Assigning to Jobs</a>
|
||||
<a class="nav-link py-1 px-3 small text-body" href="#deactivating-a-worker">Deactivating a Worker</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user