Add permission descriptions and role defaults to CompanyUsers Create/Edit
- Added form-text blurbs under every permission checkbox on both pages so admins know exactly what each permission unlocks at a glance - Replaced single Accountant default with a full roleDefaults map covering Viewer, Worker, Accountant, and Manager roles - Create page applies defaults on load and on role change (fresh form) - Edit page preserves saved permissions on load; only resets to defaults when the role is explicitly changed Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -119,90 +119,105 @@
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageJobs" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageJobs" class="form-check-label">Can Manage Jobs</label>
|
||||
<div class="form-text text-muted small">Create, edit, and update job status; manage job items, worker assignments, and time entries</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageInventory" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageInventory" class="form-check-label">Can Manage Inventory</label>
|
||||
<div class="form-text text-muted small">Add and adjust powder stock, record transactions, manage reorder levels</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageCustomers" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageCustomers" class="form-check-label">Can Manage Customers</label>
|
||||
<div class="form-text text-muted small">Create and edit customer records, pricing tiers, tax exemption, and credit limits</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanCreateQuotes" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanCreateQuotes" class="form-check-label">Can Create Quotes</label>
|
||||
<div class="form-text text-muted small">Build quotes with line items and AI photo quoting; convert accepted quotes to jobs</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanApproveQuotes" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanApproveQuotes" class="form-check-label">Can Approve Quotes</label>
|
||||
<div class="form-text text-muted small">Accept or reject submitted quotes on behalf of the company</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageCalendar" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageCalendar" class="form-check-label">Can Manage Calendar</label>
|
||||
<div class="form-text text-muted small">Create, edit, and delete oven schedule batches and calendar events</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanViewCalendar" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanViewCalendar" class="form-check-label">Can View Calendar</label>
|
||||
<div class="form-text text-muted small">View the oven scheduler and job calendar (read-only, no editing)</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageProducts" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageProducts" class="form-check-label">Can Manage Products</label>
|
||||
<div class="form-text text-muted small">Add and edit catalog items, service pricing, and pricing tier configurations</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanViewProducts" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanViewProducts" class="form-check-label">Can View Products</label>
|
||||
<div class="form-text text-muted small">Browse the service catalog and inventory items (read-only, no editing)</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageEquipment" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageEquipment" class="form-check-label">Can Manage Equipment</label>
|
||||
<div class="form-text text-muted small">Add and update equipment records, track status changes and operating costs</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageVendors" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageVendors" class="form-check-label">Can Manage Vendors</label>
|
||||
<div class="form-text text-muted small">Add and edit vendor/supplier records, payment terms, and contact information</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageMaintenance" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageMaintenance" class="form-check-label">Can Manage Maintenance</label>
|
||||
<div class="form-text text-muted small">Schedule and record equipment maintenance tasks, assign technicians, log parts used</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageInvoices" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageInvoices" class="form-check-label">Can Manage Invoices</label>
|
||||
<div class="form-text text-muted small">Create invoices, record payments, send to customers, issue voids and write-offs</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanViewReports" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanViewReports" class="form-check-label">Can View Reports</label>
|
||||
<div class="form-text text-muted small">Access financial and operational reports, analytics dashboards, and data exports</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageBills" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageBills" class="form-check-label">Can Manage Bills & AP</label>
|
||||
<div class="form-text text-muted small">Enter and pay vendor bills, manage purchase orders and accounts payable</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@@ -237,32 +252,33 @@
|
||||
const permissionCheckboxes = document.querySelectorAll('.permission-checkbox');
|
||||
const adminAlert = document.getElementById('companyAdminAlert');
|
||||
|
||||
const accountantDefaults = ['CanManageInvoices', 'CanViewReports', 'CanManageVendors', 'CanManageBills', 'CanManageAccounting'];
|
||||
const roleDefaults = {
|
||||
'Viewer': ['CanViewCalendar', 'CanViewProducts'],
|
||||
'Worker': ['CanManageJobs', 'CanViewCalendar', 'CanViewProducts'],
|
||||
'Accountant': ['CanManageInvoices', 'CanViewReports', 'CanManageVendors', 'CanManageBills', 'CanManageAccounting'],
|
||||
'Manager': ['CanManageJobs', 'CanManageInventory', 'CanManageCustomers', 'CanCreateQuotes', 'CanApproveQuotes',
|
||||
'CanManageCalendar', 'CanViewCalendar', 'CanManageProducts', 'CanViewProducts',
|
||||
'CanManageEquipment', 'CanManageVendors', 'CanManageMaintenance', 'CanManageInvoices',
|
||||
'CanViewReports', 'CanManageBills']
|
||||
};
|
||||
|
||||
function updatePermissionState() {
|
||||
const role = roleSelect.value;
|
||||
const isCompanyAdmin = role === 'CompanyAdmin';
|
||||
const isAccountant = role === 'Accountant';
|
||||
|
||||
adminAlert.style.display = isCompanyAdmin ? 'block' : 'none';
|
||||
|
||||
const defaults = roleDefaults[role] || [];
|
||||
permissionCheckboxes.forEach(checkbox => {
|
||||
if (isCompanyAdmin) {
|
||||
checkbox.checked = true;
|
||||
checkbox.disabled = true;
|
||||
} else {
|
||||
checkbox.disabled = false;
|
||||
if (isAccountant) {
|
||||
checkbox.checked = accountantDefaults.includes(checkbox.id);
|
||||
}
|
||||
checkbox.checked = defaults.includes(checkbox.id);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Run on page load
|
||||
updatePermissionState();
|
||||
|
||||
// Run when role changes
|
||||
roleSelect.addEventListener('change', updatePermissionState);
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -136,90 +136,105 @@
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageJobs" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageJobs" class="form-check-label">Can Manage Jobs</label>
|
||||
<div class="form-text text-muted small">Create, edit, and update job status; manage job items, worker assignments, and time entries</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageInventory" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageInventory" class="form-check-label">Can Manage Inventory</label>
|
||||
<div class="form-text text-muted small">Add and adjust powder stock, record transactions, manage reorder levels</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageCustomers" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageCustomers" class="form-check-label">Can Manage Customers</label>
|
||||
<div class="form-text text-muted small">Create and edit customer records, pricing tiers, tax exemption, and credit limits</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanCreateQuotes" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanCreateQuotes" class="form-check-label">Can Create Quotes</label>
|
||||
<div class="form-text text-muted small">Build quotes with line items and AI photo quoting; convert accepted quotes to jobs</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanApproveQuotes" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanApproveQuotes" class="form-check-label">Can Approve Quotes</label>
|
||||
<div class="form-text text-muted small">Accept or reject submitted quotes on behalf of the company</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageCalendar" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageCalendar" class="form-check-label">Can Manage Calendar</label>
|
||||
<div class="form-text text-muted small">Create, edit, and delete oven schedule batches and calendar events</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanViewCalendar" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanViewCalendar" class="form-check-label">Can View Calendar</label>
|
||||
<div class="form-text text-muted small">View the oven scheduler and job calendar (read-only, no editing)</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageProducts" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageProducts" class="form-check-label">Can Manage Products</label>
|
||||
<div class="form-text text-muted small">Add and edit catalog items, service pricing, and pricing tier configurations</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanViewProducts" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanViewProducts" class="form-check-label">Can View Products</label>
|
||||
<div class="form-text text-muted small">Browse the service catalog and inventory items (read-only, no editing)</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageEquipment" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageEquipment" class="form-check-label">Can Manage Equipment</label>
|
||||
<div class="form-text text-muted small">Add and update equipment records, track status changes and operating costs</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageVendors" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageVendors" class="form-check-label">Can Manage Vendors</label>
|
||||
<div class="form-text text-muted small">Add and edit vendor/supplier records, payment terms, and contact information</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageMaintenance" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageMaintenance" class="form-check-label">Can Manage Maintenance</label>
|
||||
<div class="form-text text-muted small">Schedule and record equipment maintenance tasks, assign technicians, log parts used</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageInvoices" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageInvoices" class="form-check-label">Can Manage Invoices</label>
|
||||
<div class="form-text text-muted small">Create invoices, record payments, send to customers, issue voids and write-offs</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanViewReports" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanViewReports" class="form-check-label">Can View Reports</label>
|
||||
<div class="form-text text-muted small">Access financial and operational reports, analytics dashboards, and data exports</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input asp-for="CanManageBills" class="form-check-input permission-checkbox" />
|
||||
<label asp-for="CanManageBills" class="form-check-label">Can Manage Bills & AP</label>
|
||||
<div class="form-text text-muted small">Enter and pay vendor bills, manage purchase orders and accounts payable</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@@ -263,39 +278,45 @@
|
||||
const adminAlert = document.getElementById('companyAdminAlert');
|
||||
const isSuperAdmin = @((ViewBag.IsSuperAdmin as bool? ?? false) ? "true" : "false");
|
||||
|
||||
const accountantDefaults = ['CanManageInvoices', 'CanViewReports', 'CanManageVendors', 'CanManageBills', 'CanManageAccounting'];
|
||||
const roleDefaults = {
|
||||
'Viewer': ['CanViewCalendar', 'CanViewProducts'],
|
||||
'Worker': ['CanManageJobs', 'CanViewCalendar', 'CanViewProducts'],
|
||||
'Accountant': ['CanManageInvoices', 'CanViewReports', 'CanManageVendors', 'CanManageBills', 'CanManageAccounting'],
|
||||
'Manager': ['CanManageJobs', 'CanManageInventory', 'CanManageCustomers', 'CanCreateQuotes', 'CanApproveQuotes',
|
||||
'CanManageCalendar', 'CanViewCalendar', 'CanManageProducts', 'CanViewProducts',
|
||||
'CanManageEquipment', 'CanManageVendors', 'CanManageMaintenance', 'CanManageInvoices',
|
||||
'CanViewReports', 'CanManageBills']
|
||||
};
|
||||
|
||||
function updatePermissionState() {
|
||||
// On page load: only lock CompanyAdmin; preserve saved permission values for other roles.
|
||||
function initPermissionLock() {
|
||||
if (isSuperAdmin) return;
|
||||
const isCompanyAdmin = roleSelect.value === 'CompanyAdmin';
|
||||
adminAlert.style.display = isCompanyAdmin ? 'block' : 'none';
|
||||
if (isCompanyAdmin) {
|
||||
permissionCheckboxes.forEach(cb => { cb.checked = true; cb.disabled = true; });
|
||||
}
|
||||
}
|
||||
|
||||
// On role change: apply role defaults so the admin gets a sensible starting point.
|
||||
function applyRoleDefaults() {
|
||||
const role = roleSelect.value;
|
||||
const isCompanyAdmin = role === 'CompanyAdmin';
|
||||
const isAccountant = role === 'Accountant';
|
||||
|
||||
if (isSuperAdmin) {
|
||||
adminAlert.style.display = 'none';
|
||||
permissionCheckboxes.forEach(checkbox => { checkbox.disabled = false; });
|
||||
return;
|
||||
}
|
||||
|
||||
adminAlert.style.display = isCompanyAdmin ? 'block' : 'none';
|
||||
|
||||
const defaults = roleDefaults[role] || [];
|
||||
permissionCheckboxes.forEach(checkbox => {
|
||||
if (isCompanyAdmin) {
|
||||
checkbox.checked = true;
|
||||
checkbox.disabled = true;
|
||||
} else {
|
||||
checkbox.disabled = false;
|
||||
if (isAccountant) {
|
||||
checkbox.checked = accountantDefaults.includes(checkbox.id);
|
||||
}
|
||||
checkbox.checked = defaults.includes(checkbox.id);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Run on page load
|
||||
updatePermissionState();
|
||||
|
||||
// Run when role changes
|
||||
roleSelect.addEventListener('change', updatePermissionState);
|
||||
initPermissionLock();
|
||||
roleSelect.addEventListener('change', applyRoleDefaults);
|
||||
});
|
||||
</script>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user