Skip to content

24/7 Operations
Smart Locker Calculator

Calculate Your Optimal Locker Counts

24/7 Operations Locker Calculator

24/7 Operations Locker Calculator

Calculate optimal locker counts for multi-shift operations based on real-world usage patterns

Shift Structure

Employee Counts

Retention Patterns

Set how long employees typically keep their lockers after their shift ends. Based on analysis, this is a major factor in locker utilization.

Auto-Release Locker Rules

Enable auto-release locker rules to automatically expire lockers after a set time following shift end. This can significantly reduce locker requirements.

Capacity Buffer

Add extra capacity to handle unexpected peaks or growth.

Your calculation results have been saved successfully!
There was an error saving your results. Please try again.

Base Requirement

Without accounting for retention

0

Based on peak concurrent employees

Optimized Requirement

With retention patterns

0

Based on shift overlaps and retention

Final Recommendation

With optimization and buffer

0

With buffer

Locker Utilization Throughout Day

Showing expected locker usage over a 24-hour period

Key Insights

Capacity Findings

  • Peak utilization occurs during shift transitions, particularly Morning/Afternoon transition
  • Base locker requirement for peak concurrent employees: 0
  • Additional lockers needed due to retention patterns: 0

Recommendations

  • Install 0 lockers to accommodate all shifts with adequate buffer
  • Consider implementing locker retention policies to reduce extended usage
  • Review shift schedules to minimize transition congestion
  • Implementing auto-release locker rules could significantly reduce requirements
\n'; // Write to the window and close it after printing printWindow.document.open(); printWindow.document.write(printContent); printWindow.document.close(); } function emailResults() { // Get the email address var userEmail = document.getElementById('userEmail').value; // Validate email if (!userEmail || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(userEmail)) { alert('Please enter a valid email address to send results.'); document.getElementById('userEmail').focus(); return; } // Get calculator values var calculatorValues = getCalculatorValues(); // Create email content var emailSubject = 'Locker Calculator Results'; var emailBody = "24/7 Operations Locker Calculator Results\n\n"; emailBody += "==========================\n\n"; emailBody += "RESULTS SUMMARY:\n"; emailBody += "Base Requirement: " + calculatorValues.baseLockerCount + " lockers\n"; emailBody += "Optimized Requirement: " + calculatorValues.optimizedLockerCount + " lockers\n"; emailBody += "Final Recommendation: " + calculatorValues.finalRecommendation + " lockers\n\n"; emailBody += "CONFIGURATION:\n"; emailBody += "Number of Shifts: " + calculatorValues.numberOfShifts + "\n"; emailBody += calculatorValues.shiftDetails; emailBody += "\nBuffer percentage: " + calculatorValues.bufferPercentage + "%\n"; if (calculatorValues.useHotLockers) { emailBody += "Auto-release time: " + calculatorValues.hotLockerExpiry + " minutes\n"; } emailBody += "\nKEY INSIGHTS:\n"; emailBody += "* Peak utilization occurs during shift transitions\n"; emailBody += "* Additional lockers needed: " + calculatorValues.additionalLockersInsight + " lockers\n"; if (calculatorValues.useHotLockers) { emailBody += "* Potential locker savings with auto-release rules: " + calculatorValues.lockerSavingsInsight + " lockers"; } emailBody += "\n\nFor more information about our smart locker solutions, please contact us at info@hamiltoncs.com"; // Create and show the email options modal createEmailOptionsModal(userEmail, emailSubject, emailBody); } // Function to create and show the email options modal function createEmailOptionsModal(email, subject, body) { // Create modal container var modal = document.createElement('div'); modal.style.position = 'fixed'; modal.style.top = '0'; modal.style.left = '0'; modal.style.width = '100%'; modal.style.height = '100%'; modal.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'; modal.style.display = 'flex'; modal.style.justifyContent = 'center'; modal.style.alignItems = 'center'; modal.style.zIndex = '9999'; // Create modal content var modalContent = document.createElement('div'); modalContent.style.backgroundColor = 'white'; modalContent.style.padding = '20px'; modalContent.style.borderRadius = '8px'; modalContent.style.maxWidth = '500px'; modalContent.style.width = '90%'; modalContent.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.1)'; // Create heading var heading = document.createElement('h3'); heading.textContent = 'Email Results'; heading.style.marginTop = '0'; heading.style.fontFamily = 'stymie'; heading.style.color = '#33c1e9'; // Create description var description = document.createElement('p'); description.textContent = 'Choose how you would like to receive your results:'; // Create clipboard option var clipboardBtn = createButton('Copy to Clipboard', '#789cc5'); clipboardBtn.addEventListener('click', function() { copyToClipboard(body); var notification = document.createElement('div'); notification.textContent = 'Results copied to clipboard! Paste into your email client.'; notification.style.marginTop = '10px'; notification.style.padding = '10px'; notification.style.backgroundColor = '#33c1e9'; notification.style.color = '#445'; notification.style.borderRadius = '4px'; modalContent.appendChild(notification); // Auto-close after showing notification setTimeout(function() { document.body.removeChild(modal); }, 3000); }); // Create default email client option var mailtoBtn = createButton('Open in Default Email App', '#688fbc'); mailtoBtn.addEventListener('click', function() { document.body.removeChild(modal); window.location.href = "mailto:" + email + "?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body); }); // Create Gmail option var gmailBtn = createButton('Open with Gmail', '#517eb1'); gmailBtn.addEventListener('click', function() { document.body.removeChild(modal); window.open("https://mail.google.com/mail/?view=cm&fs=1&to=" + email + "&su=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body), '_blank'); }); // Create Outlook option var outlookBtn = createButton('Open with Outlook Web', '#3a6ea7'); outlookBtn.addEventListener('click', function() { document.body.removeChild(modal); window.open("https://outlook.live.com/owa/?path=/mail/action/compose&to=" + email + "&subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body), '_blank'); }); // Create close button var closeBtn = document.createElement('button'); closeBtn.textContent = 'Cancel'; closeBtn.style.marginTop = '15px'; closeBtn.style.padding = '8px 16px'; closeBtn.style.border = '1px solid #ddd'; closeBtn.style.borderRadius = '4px'; closeBtn.style.backgroundColor = '#f3f4f6'; closeBtn.style.cursor = 'pointer'; closeBtn.addEventListener('click', function() { document.body.removeChild(modal); }); // Helper function to create a styled button function createButton(text, color) { var button = document.createElement('button'); button.textContent = text; button.style.display = 'block'; button.style.width = '100%'; button.style.marginTop = '10px'; button.style.padding = '10px'; button.style.backgroundColor = color; button.style.color = 'white'; button.style.border = 'none'; button.style.borderRadius = '4px'; button.style.cursor = 'pointer'; return button; } // Helper function to copy text to clipboard function copyToClipboard(text) { var textArea = document.createElement('textarea'); textArea.value = text; textArea.style.position = 'fixed'; // Avoid scrolling to bottom document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { var successful = document.execCommand('copy'); console.log('Copying ' + (successful ? 'succeeded' : 'failed')); } catch (err) { console.error('Unable to copy to clipboard', err); } document.body.removeChild(textArea); } // Assemble the modal modalContent.appendChild(heading); modalContent.appendChild(description); modalContent.appendChild(clipboardBtn); modalContent.appendChild(mailtoBtn); modalContent.appendChild(gmailBtn); modalContent.appendChild(outlookBtn); modalContent.appendChild(closeBtn); modal.appendChild(modalContent); document.body.appendChild(modal); // Close when clicking outside the modal modal.addEventListener('click', function(e) { if (e.target === modal) { document.body.removeChild(modal); } }); } // Helper function to get calculator values function getCalculatorValues() { // Get elements from the page var baseLockerCount = document.getElementById('baseLockerCount').textContent || '0'; var optimizedLockerCount = document.getElementById('optimizedLockerCount').textContent || '0'; var finalRecommendation = document.getElementById('finalRecommendation').textContent || '0'; var finalRecommendationLabel = document.getElementById('finalRecommendationLabel').textContent || ''; var additionalLockersInsight = document.getElementById('additionalLockersInsight').textContent || '0'; // Get company name var companyName = document.getElementById('companyName') ? document.getElementById('companyName').value || 'Your Company' : 'Your Company'; // Check if hot lockers are enabled (look for displayed hot locker insights) var hotLockerInsights = document.getElementById('hotLockerInsights'); var useHotLockers = hotLockerInsights ? (hotLockerInsights.style.display !== 'none') : false; var hotLockerExpiry = '60'; // default var expiryTimeInsight = document.getElementById('expiryTimeInsight'); if (expiryTimeInsight) { hotLockerExpiry = expiryTimeInsight.textContent || '60'; } var lockerSavingsInsight = '0'; var savingsElement = document.getElementById('lockerSavingsInsight'); if (savingsElement) { lockerSavingsInsight = savingsElement.textContent || '0'; } var savingsPercentageInsight = '0'; var percentElement = document.getElementById('savingsPercentageInsight'); if (percentElement) { savingsPercentageInsight = percentElement.textContent || '0'; } // Get buffer percentage var bufferPercentage = '0'; var bufferElement = document.getElementById('bufferPercentage'); if (bufferElement) { bufferPercentage = bufferElement.value || '0'; } // Get shift information var numberOfShifts = 3; // default var shiftsElement = document.getElementById('numberOfShifts'); if (shiftsElement) { numberOfShifts = shiftsElement.value || '3'; } // Build shift list and details by scanning the DOM var shiftList = ''; var shiftDetails = ''; var shiftCards = document.querySelectorAll('.shift-card'); if (shiftCards.length > 0) { for (var i = 0; i < shiftCards.length; i++) { var card = shiftCards[i]; var nameInput = card.querySelector('.shift-name'); var startInput = card.querySelector('.shift-start'); var endInput = card.querySelector('.shift-end'); if (nameInput && startInput && endInput) { var name = nameInput.value || 'Shift ' + (i+1); var start = startInput.value || '00:00'; var end = endInput.value || '00:00'; // Get employee count for this shift var employeeCount = '0'; var employeeInputs = document.querySelectorAll('.employee-count'); if (employeeInputs.length > i) { employeeCount = employeeInputs[i].value || '0'; } shiftList += '
  • ' + name + ' Shift: ' + start + ' to ' + end + ' (' + employeeCount + ' employees)
  • \n'; shiftDetails += name + ' Shift: ' + start + ' to ' + end + ' (' + employeeCount + ' employees)\n'; } } } return { baseLockerCount: baseLockerCount, optimizedLockerCount: optimizedLockerCount, finalRecommendation: finalRecommendation, finalRecommendationLabel: finalRecommendationLabel, additionalLockersInsight: additionalLockersInsight, companyName: companyName, useHotLockers: useHotLockers, hotLockerExpiry: hotLockerExpiry, lockerSavingsInsight: lockerSavingsInsight, savingsPercentageInsight: savingsPercentageInsight, bufferPercentage: bufferPercentage, numberOfShifts: numberOfShifts, shiftList: shiftList, shiftDetails: shiftDetails }; } }); })();