Add Employee Recognition feature to notifications system
- Add Recognition notification type (ID 5) with blue color - Add employeesso field to notifications table - Create carousel display for Recognition on shopfloor dashboard - Show employee names (lookup from wjf_employees) instead of SSO - Auto-set starttime to NOW and endtime to 4AM next day - Auto-enable shopfloor display for Recognition type - Add Achievements tab to employee profile (displayprofile.asp) - Hide Recognition from calendar view - Add lookupemployee.asp AJAX endpoint for name preview - Fix datetime double-formatting bug in save/update files - Fix URL parameter loading on shopfloor dashboard init 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -188,7 +188,7 @@
|
||||
<small class="form-text text-muted">Link this notification to a specific application (e.g., for software updates)</small>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="form-group" id="ticketnumberGroup">
|
||||
<label for="ticketnumber">Ticket Number</label>
|
||||
<input type="text" class="form-control" id="ticketnumber" name="ticketnumber"
|
||||
value="<%=Server.HTMLEncode(rs("ticketnumber") & "")%>"
|
||||
@@ -196,7 +196,18 @@
|
||||
<small class="form-text text-muted">Optional ServiceNow ticket number</small>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group" id="employeessoGroup" style="display:none;">
|
||||
<label for="employeesso">Employee SSO(s) <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control" id="employeesso" name="employeesso"
|
||||
value="<%=Server.HTMLEncode(rs("employeesso") & "")%>"
|
||||
maxlength="100" placeholder="123456789 or 123456789, 987654321">
|
||||
<small class="form-text text-muted">Enter one or more SSOs separated by commas</small>
|
||||
<div id="employeePreview" class="mt-2" style="display:none;">
|
||||
<span class="badge badge-info" id="employeeNames"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row" id="timeFieldsRow">
|
||||
<div class="form-group col-md-6">
|
||||
<label for="starttime">Start Time <span class="text-danger">*</span></label>
|
||||
<div class="input-group">
|
||||
@@ -318,6 +329,75 @@
|
||||
function clearEndtime() {
|
||||
document.getElementById('endtime').value = '';
|
||||
}
|
||||
|
||||
// Handle notification type change for Recognition
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var typeSelect = document.getElementById('notificationtypeid');
|
||||
typeSelect.addEventListener('change', handleTypeChange);
|
||||
handleTypeChange(); // Initial check
|
||||
|
||||
// Employee lookup on SSO input
|
||||
var ssoInput = document.getElementById('employeesso');
|
||||
ssoInput.addEventListener('input', function() {
|
||||
clearTimeout(window.lookupTimeout);
|
||||
window.lookupTimeout = setTimeout(lookupEmployees, 500);
|
||||
});
|
||||
// Trigger initial lookup if SSO has value
|
||||
if (ssoInput.value.trim()) {
|
||||
lookupEmployees();
|
||||
}
|
||||
});
|
||||
|
||||
function handleTypeChange() {
|
||||
var typeSelect = document.getElementById('notificationtypeid');
|
||||
var selectedText = typeSelect.options[typeSelect.selectedIndex].text;
|
||||
var isRecognition = selectedText.toLowerCase().indexOf('recognition') !== -1;
|
||||
|
||||
// Show/hide SSO field
|
||||
document.getElementById('employeessoGroup').style.display = isRecognition ? 'block' : 'none';
|
||||
document.getElementById('employeesso').required = isRecognition;
|
||||
|
||||
// Show/hide time fields and ticket number for Recognition
|
||||
document.getElementById('timeFieldsRow').style.display = isRecognition ? 'none' : 'flex';
|
||||
document.getElementById('ticketnumberGroup').style.display = isRecognition ? 'none' : 'block';
|
||||
|
||||
// For Recognition, remove required from starttime
|
||||
document.getElementById('starttime').required = !isRecognition;
|
||||
|
||||
// Auto-check shopfloor dashboard for Recognition
|
||||
if (isRecognition) {
|
||||
document.getElementById('isshopfloor').checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
function lookupEmployees() {
|
||||
var ssoInput = document.getElementById('employeesso');
|
||||
var ssos = ssoInput.value.trim();
|
||||
var previewDiv = document.getElementById('employeePreview');
|
||||
var namesSpan = document.getElementById('employeeNames');
|
||||
|
||||
if (!ssos) {
|
||||
previewDiv.style.display = 'none';
|
||||
return;
|
||||
}
|
||||
|
||||
fetch('./lookupemployee.asp?sso=' + encodeURIComponent(ssos))
|
||||
.then(function(response) { return response.json(); })
|
||||
.then(function(data) {
|
||||
if (data.success && data.names) {
|
||||
namesSpan.textContent = data.names;
|
||||
namesSpan.className = 'badge badge-info';
|
||||
previewDiv.style.display = 'block';
|
||||
} else {
|
||||
namesSpan.textContent = data.error || 'Employee not found';
|
||||
namesSpan.className = 'badge badge-warning';
|
||||
previewDiv.style.display = 'block';
|
||||
}
|
||||
})
|
||||
.catch(function(err) {
|
||||
previewDiv.style.display = 'none';
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user