Changelog
May 20 2026
- Fix to Calendar events showing on multiple days after calendar event is moved.
- Fix to CRM error when editing customer.
May 19 2026
- Updated MP operations page to show connection status to TromisMPInterface
- Updated Metal Progetti to assigned package completion and creation to newly created MetalProgetti user
- Added storage aging column to Warehouse Heat Map detail
May 15 2026
- Added new Order Name Format field to Company settings, to allow companies to set a default Order Name Format. i.e. LastName, FirstName; LastName, City; etc...
- Updated Order New page to use new Order Name Format when creating orders.
- Fix to Metal Progetti packages not being assigned correct Assembly Arm location.
- Updated Metal Progetti Packages to be Created By and Completed By "System User", instead of logged in user.
- Updated System Usage report to no longer show Metal Progetti packages, as they are not relevant to user activity.
May 14 2026
- Updated SMS notifications to only notify most recently involved users, else default to notifying users assigned through notification controls
- Updated SMS notifications to include message re-cap
- Updated SMS popup to allow users to toggle "Seen" status
May 13 2026
- **CRITICAL FIX**: Auto-Schedule Scoring Weight Rebalancing - Fixed issue where taggers were being underutilized on early days (e.g., KM at 49%, AHer at 43% on May 14) while later days became over-utilized (100%+). ROOT CAUSE: The dayScore multiplier (100) created scores of 3000+ points for Day 0, completely dominating the userUtilizationScore (300 points max). This caused the algorithm to jump to Day 1 even when Day 0 still had significant capacity available. SOLUTION: Increased userUtilizationScore weight from 3x to 10x (1000 point range), increased cumulativeUtilScore from 2x to 5x (500 point range), and reduced dayScore multiplier from 100 to 50. New scoring formula ensures filling available capacity on current day takes priority over moving to next day, while still preferring earlier days overall. Updated weights: userUtilizationScore (1000pts), cumulativeUtilScore (500pts), dayScore (up to 1500pts but only 50pt difference between consecutive days), warehouseScore (100pts), aggregateUtilizationScore (100pts). (taggingautoschedule.js)
- Auto-Schedule Cumulative Utilization Tie-Breaker - Added cumulative user utilization scoring to prevent taggers from being skipped when all users have the same daily utilization. When multiple taggers start at 0% utilization on a given day, the algorithm now looks at their average utilization across previous working days and favors the tagger who has been underutilized. For example, if KM was idle on several previous days while AHer and SM1 were working, KM will now get priority for the next task assignment. This ensures work is distributed more evenly across taggers over multi-day periods. Cumulative utilization score weighted at 200 points (between daily utilization at 300 points and day score at 1000 points). (taggingautoschedule.js)
- **CRITICAL FIX**: Per-Tagger Utilization Display Accuracy - Fixed bug where individual tagger utilization percentages and bag counts were incorrect in the expandable utilization details. Issue occurred because the displayed utilization was reading from the scheduler's internal capacity tracking (day.assigned) which accumulates all assigned bags during scheduling, including multi-day task portions. This caused inflated numbers like "81/62 bags (131%)" when actual displayed tasks only showed a portion. Now calculates per-user assigned bags directly from the tasks visible on that day by summing (Bags - BagsTagged) for each tagger's tasks. Multi-day tasks now correctly show only their daily portion in each tagger's utilization. (taggingtasklist.js)
- Expandable Per-Tagger Utilization Details - Added expandable section to the utilization progress bars in the suggested schedule view. Click the arrow (▶/▼) next to any day's utilization bar to expand and see individual tagger utilization for that day. Shows each tagger's assigned bags, usable capacity, and utilization percentage with color-coded mini progress bars (green <70%, orange 70-89%, red ≥90%). Taggers are sorted by utilization percentage (highest first) to quickly identify who is most/least loaded. Helps verify the auto-scheduler is distributing work evenly across all available taggers each day. (taggingtasklist.js)
- Multi-Day Task Indicator Moved to Date Column - Moved the purple "*" multi-day indicator from the container count column to the due date column for better visibility and clearer association with the scheduling date. Tooltip still shows "Multi-day task: X bags total across Y days (Day Z of Y)" when hovering over the asterisk. (taggingtasklist.js)
- **MAJOR FIX**: Auto-Schedule Individual Tagger Utilization Balancing - Fixed critical issue where the auto-scheduler was filling aggregate daily capacity correctly but not distributing work across individual taggers each working day. For example, tagger KM had no tasks assigned on May 14 despite being available while AHer was heavily loaded. ROOT CAUSE: Scoring algorithm only considered aggregate day utilization and day earliness, not per-user daily utilization. Added userUtilizationScore (300 point weight) that prioritizes taggers with lower individual utilization on each day. New scoring formula: userUtilizationScore (300pts) + dayScore (1000pts) + warehouseScore (100pts) + aggregateUtilizationScore (100pts). This ensures all available taggers receive work each day they're working, targeting ~80% individual utilization before moving to the next day. Enhanced console logging shows user utilization changes: "(user: 25% → 45%)". (taggingautoschedule.js)
- Multi-Day Task Improvements - Multi-day tasks (tasks requiring >1 day capacity) now display as separate line items for each day they span, with a purple "*" indicator and tooltip showing "Multi-day task: X bags total across Y days (Day Z of Y)". Tasks maintain tagger continuity - the same person is assigned for all days to avoid confusion and improve efficiency. The handleMultiDayTask function now returns an array of assignments (one per day) instead of a single assignment. Enhanced logging shows "MULTI-DAY (3 days, 150 bags total)" with per-day breakdown. Metadata includes multiDayTotal, multiDayPart, and multiDayTotalParts fields. (taggingautoschedule.js, taggingtasklist.js)
May 12 2026
- **CRITICAL FIX**: Multi-Day Tasks Bypassing Early Day Protection - Fixed critical bug where multi-day tasks (tasks requiring more than one day's capacity) were bypassing the early day protection logic entirely. ROOT CAUSE: The handleMultiDayTask function was not receiving or setting the `phase` property on assignment objects, causing tasks without phase labels (Priority 63, 85, 59 in testing) to skip the early day protection check. Multi-day tasks with MEDIUM/LOW priority were getting assigned to Days 0-4 because the check `if(phase === 'medium' || phase === 'low')` failed when phase was undefined. Now handleMultiDayTask receives phase and taskPriority parameters, applies the same 5% threshold check, and includes phase in the returned assignment. This ensures ALL tasks (single-day and multi-day) respect the phase constraints. (taggingautoschedule.js)
- **CRITICAL FIX**: Auto-Schedule Early Day Protection - Fixed issue where MEDIUM (50-99) and LOW (<50) priority tasks were being assigned to early days (0-4) despite multi-phase implementation. After extensive testing with 60% and 40% thresholds, implemented final solution: COMPLETELY BLOCK MEDIUM/LOW phases from days 0-4 once those days have ANY meaningful utilization (>5%). Debug logging revealed that Days 0-2 were under 40% utilization when MEDIUM tasks were evaluated, allowing them to pass through. The 5% threshold essentially means "block if not empty", ensuring early days are exclusively reserved for CRITICAL (150+) and HIGH (100-149) priority work. Tasks Priority 63, 85, and 59 were all getting Day 0-2 - they will now skip to Day 5+. This ensures the phase system works as designed: CRITICAL gets days 0-4, HIGH gets days 0-7, MEDIUM/LOW use remaining capacity on days 5+. (taggingautoschedule.js)
- **MAJOR REFACTOR**: Auto-Schedule Multi-Phase Sequential Assignment - Completely refactored the scheduling algorithm from complex weighted scoring to a simpler, more predictable multi-phase approach. Tasks are now assigned in priority tiers: CRITICAL (150+), HIGH (100-149), MEDIUM (50-99), and LOW (<50). Each phase has specific constraints: Critical tasks get first 5 days and fill to 85%, High tasks get first 8 days and fill to 90%, Medium tasks use any day up to 90%, Low tasks fill to 85%. This prevents lower-priority tasks from "stealing" early day capacity that should be reserved for higher-priority work. The new approach eliminates the constant need to rebalance scoring weights and guarantees that high-priority tasks always get the earliest available days. Simple scoring within each phase (day order + warehouse match + utilization) provides tie-breaking when multiple options exist. (taggingautoschedule.js)
- **CRITICAL FIX**: Auto-Schedule Day Order Priority - Fixed issue where tasks were being scheduled on later days (e.g., Tuesday May 19 over-capacity) while earlier days (e.g., Monday May 18 under-utilized) remained under-utilized. ROOT CAUSE: Warehouse matching bonus (+500) was overriding day order preference, causing tasks to skip earlier days if a later day had better warehouse match. Rebalanced scoring: increased day index multiplier from 50 to 100 (making it 1000 points for earliest day vs 100 for latest), and reduced warehouse bonus from +500/-300 to +200/-100. This ensures tasks are scheduled on earliest available days while still considering warehouse optimization as a secondary factor. Earlier days are now strongly preferred unless they're at capacity. (taggingautoschedule.js)
- **CRITICAL FIX**: Auto-Schedule Tagger Reassignment Enabled - Fixed constraint that was preventing the auto-scheduler from reassigning taggers on firm date tasks. Previously, if a task had a specific time (firm date), the algorithm would lock the assigned tagger and refuse to reassign the task even if a different tagger had better capacity or warehouse match. Now the algorithm can reassign ANY task to ANY tagger based on capacity, priority, and warehouse optimization, regardless of whether the task has a firm date. Firm dates are still respected (task stays on the same date), but the tagger assignment is optimized. This enables the scheduler to fully utilize available capacity and minimize warehouse mismatches. (taggingautoschedule.js)
- **CRITICAL FIX**: Auto-Schedule Capacity Buffer Respected - Fixed critical bug where low-priority tasks were filling up early days beyond capacity, creating 150-190% utilization. ROOT CAUSE: Scoring algorithm was using CURRENT utilization instead of PROJECTED utilization when evaluating whether to schedule a task on a day. This caused the system to give high scores to days that were at 95% current utilization, even though adding the task would push them to 120%. Now uses projected utilization for scoring. Also rebalanced scoring weights: reduced day-order preference from 100x to 50x multiplier, and implemented tiered utilization scoring targeting 80-90% (leaving buffer for higher-priority tasks). Days under 80% get bonus for efficient filling, 80-90% is optimal range (max score), 90-100% gets reduced score, over 100% heavily penalized. This ensures high-priority tasks get early days while respecting the capacity buffer. (taggingautoschedule.js)
- Auto-Schedule Current Time Awareness - Auto-scheduler now respects the current time of day when scheduling tasks. When scheduling for "today", the system calculates remaining work hours from the current time until shift end, preventing impossible schedules like assigning a 4-hour task at 4:30 PM when the shift ends at 5 PM. Time slots start from the current time (not shift start), and capacity for today is reduced based on hours remaining. Tasks that cannot fit in the remaining shift time are automatically deferred to the next available day. Example: If it's 4 PM and a user works 9 AM-5 PM, they only have 1 hour (capacity for ~8 bags) remaining for today. Future dates continue to use full shift capacity. (taggingautoschedule.js, taggingtasklist.js)
- Added Progress Completion to Task Priority Popup - The priority breakdown popup now displays the Progress Completion component when tasks have been partially completed (BagsTagged > 0). Shows the points awarded and a description of the completion percentage. This provides transparency into how the new progress completion weight affects task priority scoring. (taskprioritypop.jspf, taskprioritypop.js)
- Fixed Task Priority Popup - Reconnected taskPriorityPop functionality that was broken after splitting tasks into day-grouped tables. Priority pills (shown next to each task) are now clickable again and display the detailed priority breakdown popup showing how the priority score is calculated (group type, rush bonus, final bonus, firm delivery, near delivery, pickup age, bill due, etc.). Changed from passing table index to passing task parameters (orderRow, delivery, room, department, taskType, priority) since index is no longer valid across multiple day tables. Fixed server-side selectTaskPriorityBreakdown to accept taskType as integer ID instead of string enum name, using Task.lookup() instead of Task.valueOf(). (taggingtasklist.js, AjaxSelect.java)
- Added Progress Completion Weight to Intake task priority calculation. Tasks that have already been started (BagsTagged > 0) now receive bonus priority points using an exponential curve: 80% complete = 64% of max points, 20% complete = 4% of max points. This ensures partially completed tasks are more likely to appear at the top of the queue, helping taggers finish in-progress work before starting new tasks. Added ProgressCompletionMax field (default: 40) to tTaskWeight table via LoginDb.startup40CheckColumns() and Tune Weights popup UI with slider control. (Task.java, TaskWeightRec.java, TaskPriorityBreakdown.java, tuneweightspop.jspf, tuneweightspop.js, AjaxCtl.java, LoginDb.java)
May 11 2026
- **CRITICAL FIX**: Auto-Schedule Initial Capacity Bug - Fixed critical bug where calculateAssignedBags() was counting ALL tasks (firm and non-firm) when building initial capacity, causing days to show 200%+ utilization before scheduling even started. The algorithm should start with a CLEAN SLATE, only counting FIRM tasks (tasks with assigned person AND time > midnight). Non-firm tasks (midnight time) are eligible for rescheduling and should NOT block capacity. This was causing the scheduler to refuse assignments because it thought days were already full. Now only firm tasks count toward initial capacity, allowing non-firm tasks to be freely rescheduled. Added isTaskFirm() helper to taggingtasklist.js. (taggingtasklist.js)
- Auto-Schedule Debug Condensing - Drastically reduced console output from ~8,500 lines to ~100 lines by removing verbose per-user/per-day scoring logs, eligibility details, and day analysis summaries. Now shows: (1) Initial capacity summary with overloaded days flagged, (2) Single-line status per task showing assignment or failure, (3) Final scheduling summary. This makes it much easier to diagnose issues. (taggingautoschedule.js)
- Auto-Schedule Capacity Calculation Fix - Fixed critical bug where capacity calculations were using stale data instead of dynamically updated values as tasks were scheduled. The totalAssignedForDay calculation was incorrectly adding the current task being tested, causing double-counting in capacity usage penalty calculations. Fixed by ensuring totalAssignedForDay reflects ACTUAL assigned capacity without the current task, then calculating projections separately. This ensures the capacity usage penalty and blocking logic work correctly with real-time updated capacity data. (taggingautoschedule.js)
- Auto-Schedule Capacity Usage Penalty - Fixed critical issue where low-priority large tasks were consuming remaining capacity on early days, forcing high-priority small tasks to later days. Added penalty scoring for tasks that use more than 50% of remaining daily capacity on the first 3 days. Penalty scales from 0 (at 50% usage) to -50 (at 100% usage), making large tasks prefer later days and leaving early day capacity for high-priority tasks that come after in the processing queue. This ensures the 8-bag buffer per user per day is effectively utilized by high-priority work. Console shows "🔻 Capacity usage penalty" when applied. (taggingautoschedule.js)
- Auto-Schedule Non-Firm Task Rescheduling Fix - Fixed critical issue where non-firm tasks (tasks with midnight/00:00:00 time) were being treated as firm. ROOT CAUSE: irdate.hms() returns empty string "" for midnight times, causing isTaskFirm() to incorrectly identify them as firm (checking timeStr !== "00:00:00" when timeStr was actually ""). Fixed by checking for both empty string AND "00:00:00". The scheduler now properly removes assigned taggers from non-firm tasks, allowing them to be reassigned to any available tagger based on capacity. Additionally, only tasks scheduled for "Today" receive specific times (making them firm); future date tasks receive midnight time (00:00:00) to keep them flexible for rescheduling. This enables dynamic workload optimization as priorities change. Added comprehensive debug logging to getEligibleTasks() to help diagnose "No tasks eligible" issues - console now shows every task's eligibility status with person, date, time, firm status, and reason for inclusion/exclusion. (taggingautoschedule.js)
- Updated order storage tables to include dynamic storage locations and icons
May 8 2026
- Auto-Schedule Overfilling Prevention - Fixed critical bug where days could be overfilled beyond 100% capacity (e.g., May 8 at 165%, May 15 at 188%). Added proactive check that calculates projected utilization BEFORE assigning a task. If adding the task would push the aggregate day utilization over 100%, the task is blocked from that day (unless it's a firm date requirement). This prevents the scheduler from cramming too many tasks onto early days while later days remain under-utilized. (taggingautoschedule.js)
- Auto-Schedule Priority Day Order Fix - Fixed critical bug where high-priority tasks were being scheduled on later days (e.g., Monday) instead of earlier available days (e.g., Friday). The scoring algorithm was preferring to fill partially-utilized days over starting new days, causing earlier days to be skipped. Now for non-firm tasks, day order is the PRIMARY factor (earlier days strongly preferred), while day utilization is only a secondary tie-breaker. Firm date tasks still use the old logic to fill days efficiently. This ensures highest priority tasks get scheduled on the earliest available days. Also fixed summary display bug showing undefined values. (taggingautoschedule.js)
- Auto-Schedule Priority Debugging - Added comprehensive debug logging to track task priority order and scheduling decisions. Shows sorted task list with priorities before processing, enhanced per-task details including day names and priority highlights, day utilization before each assignment, rescheduling indicators when tasks move to different days, and end summary showing scheduled tasks grouped by day with priority ranges. This will help diagnose why lower priority tasks might be scheduled before higher priority ones. (taggingautoschedule.js)
- Auto-Schedule Work Hours Validation - Fixed bug where tasks were being assigned times outside user work hours (e.g., 11:59 pm when shift ends at 5:00 pm). Task end times are now capped at the user's shift end time to ensure all assignments respect configured work schedules. (taggingautoschedule.js)
- Auto-Schedule Warehouse Warning Fix - Fixed bug where warehouse mismatch warnings were not displaying correctly for all users. The checkWarehouseMismatch function was receiving userRow (a number) instead of the actual HomeWarehouse property. Now correctly compares task warehouse with user's home warehouse for all taggers. (taggingautoschedule.js)
- Auto-Schedule Over-Assignment Fix - Fixed critical issue where auto-scheduler would over-fill days beyond capacity. Added hard cap that prevents assignment to days already over 100% utilized (unless firm date requirement). Also fixed preferred date scoring to only apply to firm dates (tasks with time > 12:00am) - non-firm tasks now distribute purely based on available capacity without bias toward their current TaskTime. Enhanced debug logging shows current utilization before each assignment and final day utilization summary. (taggingautoschedule.js)
- Suggested Schedule Complete View - Fixed suggested schedule to show ALL scheduled tasks (both suggested changes and existing assignments), not just the tasks being changed. Days that previously appeared as "OFF" now correctly display existing task assignments. Tasks with suggested changes are highlighted with purple background and border to distinguish them from unchanged existing assignments. (taggingtasklist.js)
- Auto-Schedule Debug Logging - Added comprehensive console logging to track task assignment flow, capacity checks, scoring calculations, and best match selection. This will help diagnose why certain days may not be getting scheduled. (taggingautoschedule.js)
- Auto-Schedule Date Constraint Bug Fix - Fixed critical bug where tasks with assigned users but non-firm dates would only be scheduled on their original date, causing entire days to be skipped even when capacity was available. The algorithm now correctly distinguishes between firm date constraints (time component present) and soft date preferences, allowing tasks to be scheduled on any available day when the date is not firm. (taggingautoschedule.js)
- Suggested Schedule Table Cleanup - Removed unnecessary calendar icon and "Tag" action button columns from suggested schedule tables. These actions are not relevant in the review/approval context of the suggested schedule view. (taggingtasklist.js)
- Auto-Schedule Hold Status Handling - Auto-scheduler now respects order hold status. Orders with holds that prevent tagging (e.g., "Do not tag", "Stop all work") are excluded from auto-scheduling. Exception: Orders with "Tag and hold" status are still scheduled for tagging as intended. (taggingautoschedule.js)
- Auto-Schedule Capacity Extended to 30 Days - Increased the schedule capacity window from 5 days to 30 days to allow more tasks to be auto-scheduled and prevent tasks from being left unscheduled in the past. The system will now suggest assignments for up to 30 days in advance. (taggingtasklist.js)
- Tagging Task List Day Grouping - Updated the tagging task list to organize tasks by day, similar to the suggested schedule view. Tasks are now grouped by their TaskTime date with day headers showing day name, date, task count, and container count. (taggingtasklist.js)
- Auto-Schedule Capacity Utilization Fix - Fixed scoring algorithm to prefer earlier days and better utilize available capacity. Changed from preferring low-utilization days to preferring sequential filling (fill day 1, then day 2, etc). This prevents underutilization of later days like day 5.
- Auto-Schedule Display Enhancements - Suggested schedule now shows all 5 days including OFF days with no tasks scheduled. OFF days display "(OFF - No tagging scheduled)" in gray for consistency.
- Auto-Schedule Tagger Display Fix - Fixed suggested schedule to display the assigned tagger in the Tagger column with user icon. Task copies now include suggestedPerson as TaskPerson for proper display.
May 7 2026
- Implemented centralized tagging capacity data structure in model for scheduling and auto-assignment.
- Refactored Tagging Capacity popup to use model data structure for improved performance.
- Phase 1: Auto-Schedule Infrastructure - Created taggingautoschedule.js module with intelligent task assignment algorithm. Implemented task eligibility filtering, firm date detection, overdue handling, multi-day task splitting, time slot management, and warehouse matching. Added "Suggest Schedule" button to toolbar. Core scheduling logic complete, UI for applying suggestions in progress.
- Phase 2: Auto-Schedule UI & Server Integration - Completed day-grouped table UI with purple border styling. Added warehouse mismatch warnings (⚠️ in orange). Implemented server-side updateTaskAssignments batch update function. Wired Apply/Cancel buttons with full AJAX integration. Enhanced suggested schedule display with task counts and container summaries per day. Schedule suggestions now fully functional end-to-end.
May 6 2026
- Fix to admins not being able to view pages without specific auth/role records.
- Fix to Tagging tasks being automatically assigned to OrderLead.
- Fix to Chat popup not showing close button after closing chat the first time.
- Updated user color picker on user detail page and user preference page.
- Added ability to assign users to Tagging task from Tagging Task List.
- Added Tagging Capacity popup showing 5-day capacity view with progress bars per user.
May 5 2026
- Updated Order Bill Pop to be more responsive when changing subtotal values.
- Fix to Order Item links not using updated multi delivery selectors. ex. Unprinted Tags query
May 4 2026
- Added capacity calculations to User Schedule tab. For users marked as Taggers with configured bags-per-hour averages, the schedule now displays projected capacity (e.g., "Capacity: 40 bags") next to each day's work hours based on shift length and tagging rate. Capacity updates automatically when schedule times change or tagger status is toggled. (userdtl.js)
- Fix to Vehicle Storage counts not checking for Returned Containers.
Apr 27 2026
- Added JTime class to handle time-only values
- Update irdatepick.js to handle new JTime class
- Added User Schedule tab to user details
- Added User Schedule to Info popup
Apr 23 2026
- Fixed Task Priority Breakdown popup display layout issues. Restructured HTML to use proper two-column flex layout with labels and descriptions stacked vertically in left column and points values right-aligned in separate column. Added missing "Firm Task Time" component to popup UI and JSON serialization. Now all breakdown components display correctly with proper alignment when clicking priority pills. (taskprioritypop.jspf, taskprioritypop.js, TaskPriorityBreakdown.java)
- Added Warehouse filter to Tagging Task List. Users can now filter tasks by warehouse location using the Filter popup. Dropdown shows active warehouses sorted by short name. Filter uses tromis.warehouses KeyedArray and matches against comma-separated short names in task Warehouses field. Warehouse filter appears in filter bubble display and persists in session storage. (taggingtasklist.js, taggingfiltertablepop.jspf)
- Added Bill Due date field to Task List Date popup. Users can now view and edit the Order's Bill Due date (oDtBillDue) alongside delivery dates. Field appears between Created and Tag Due rows, uses date-only input (no time), and is disabled for load children since it's an order-level field. Backend properly handles updating OrderRec.oDtBillDue when modified. (tasklistdatepop.jspf, tasklistdatepop.js, OrderDeliveryRec.java, AjaxUpdate.java)
- Fixed missing date display after updating dates from Task List Date popup on Tagging Task List page. Added formatDateWithTime helper that uses irdate utilities (parse, mdy, hm, isZero) to properly format dates with overdue styling. Changed recent update indicator to add "recent" class to parent tr element with 2-second auto-removal timeout. Added getParentTableRow helper to traverse DOM and find parent row. Now handles all four date types (Intake, Clean, Pack, Ship). (taggingtasklist.js)
Apr 22 2026
- Filter button on Tagging Task List now has visual indicator (btnFlt class) when filters are active, making it easy to see at a glance if filtering is applied. Class is automatically removed when all filters are cleared. (taggingtasklist.js)
- Added filter bubble display to Tagging Task List that shows active filters in a clickable bubble above the task table. Clicking the bubble opens the filter popup. Includes X button to quickly clear all filters. Bubble only appears when filters are active and shows filter context (e.g., "Time:Today,Department:Board"). (taggingtasklist.js, taggingtasklist.jsp)
- Tagging Task List now loads sorted by Priority descending by default, showing highest priority tasks first. Users can still manually sort by any other column by clicking column headers. (taggingtasklist.js)
- Added client-side filtering capabilities to Tagging Task List in popup format. Users can now click Filter button to open popup with filters for Time (Today, Tomorrow, This Week, Next Week, Overdue, Future), Order, Group Name, Department, and Assigned To. Filters persist in session storage and are restored on page reload. Popup includes Close, Clear, and Apply buttons. (taggingtasklist.js, taggingtasklist.jsp, TaggingTaskListCtl.java, taggingfiltertablepop.jspf)
- Added sortable table headers to Tagging Task List. Users can now click on Priority, Customer, Group, Due, Location, and Tagger column headers to sort tasks in ascending or descending order. Sorting includes visual indicators (asc/desc CSS classes) and supports text, number, and date sorting. Implementation mirrors warehouse task list sorting functionality. (taggingtasklist.js)
Apr 21 2026
- Added TaskSort enum with time-based and priority-based sorting options for task lists, including Java Comparators for in-memory re-sorting after priority updates. (TaskSort.java)
- Added TaskFilter class for multi-criteria task filtering by assignee, delivery group name, department, order, time type, and date ranges. (TaskFilter.java, TaskSelection.java)
- Added TaggingTaskList page with integrated sorting, filtering, priority breakdown pills, and task summary statistics for improved task queue management. (TaggingTaskListCtl.java, taggingtasklist.jsp)
- Added TuneWeights popup with sliders to adjust priority calculation weights including Group Type (ST/LT), Department Type (Wet/Damp), Rush/Final/Firm bonuses, delivery proximity, pickup age, and bill due proximity. Creates tTaskWeight table with default values and validation constraints. (tuneweightspop.jspf, tuneweightspop.js, TaskWeightRec.java, TaskPriorityBreakdown.java)
Apr 17 2026
- Added Average Bags Per Day and Average Items Per Day statistics to Company settings. Created AvgBagsPerDay90Day, AvgBagsPerDayLocked, AvgBagsPerDayUpdatedAt, AvgItemsPerDay90Day, AvgItemsPerDayLocked, and AvgItemsPerDayUpdatedAt fields in CompanyRec with corresponding select and update methods. Added UI controls on companydtl.jsp with lock toggles and recalculate buttons. These stats calculate the average number of containers and items tagged per day over the last 90 days. Database columns added via LoginDb.startup40CheckColumns(). (CompanyRec.java, CompanyDtlCtl.java, companydtl.jsp, LoginDb.java)
- Implemented lock/unlock toggle feature for checkboxes in JControl. Added setLock() method that renders checkboxes as clickable lock/unlock SVG icons instead of standard checkboxes. Added ir.toggleLock() JavaScript function to handle icon click, toggle checkbox state, swap icon image, and fire change events. Added CSS styling for lock toggle icons including hover effects and disabled state. Documentation saved to logs/260417_LOCK_TOGGLE_IMPLEMENTATION.txt. (JControl.java, irutil.js, style.css)
Apr 15 2026
- Fix to missing order parameter on Order Department Container Print page causing errors when trying to print labels. Updated department container print popup to handle multiple passed DC rows for exact print matching of labels. (adddepartmentcontainerpop.jspf, orderdepartmentcontainer.js, AjaxPrint.java)
- Improved thread naming for better heap dump analysis in both AJAX requests and page navigation. For AJAX: added function name to thread name (e.g., "/trusa/ajax.jsp.activityIncompletePackages.1.42:12345678"). For regular pages: added controller class name (e.g., "/trusa/repsalesrep.jsp.RepSalesRepCtl.1.42:12345678"). Added thread name reset in finally blocks to "tromis-tomcat-idle-[hash]" to keep thread pool clean. This makes it much easier to diagnose OutOfMemoryError by immediately identifying the problematic page or AJAX function in heap dumps and thread dumps. (AjaxCtl.java, BaseController.java)
- Fixed "getOutputStream() has already been called for this response" error in download.jsp. Removed script tag after DownloadCtl.process() call and added return statement to prevent JSP from trying to write HTML content after binary file download has been sent via getOutputStream(). The error occurred because JSP response can only use either getOutputStream() (for binary data) or getWriter() (for text/HTML), not both. Added WebSocket message to automatically close pleaseWait modal after download completes, since the script tag can no longer be used. (download.jsp, DownloadCtl.java, websocketclient.js)
Apr 14 2026
- Modified overnight CRM followup calendar event generation to limit creation to 20 events per sales rep per day instead of 20 total events across all sales reps. This ensures fair distribution of automated followup tasks among all active sales representatives. Uses MySQL user variables to simulate ROW_NUMBER functionality for MySQL 5.8 compatibility. (SiteCalendarCmd.java)
Apr 13 2026
- Fixed NullPointerException when uploading unsupported image formats (e.g., WebP). Added null check after ImageIO.read() to provide clear error message: "Unsupported image format: [ext]. Please use JPG, PNG, or GIF format." Also added defensive null check in checkPink() method. Java's ImageIO doesn't natively support WebP, which caused bufferedImage to be null and triggered NPE when attempting to process the image. (OrderImageRec.java)
- Fixed SQL syntax error in sp_fill_company_stats stored procedure. Missing closing parenthesis for LEAST() function in TopBillToCoPercent calculation (line 482) caused "Error Code: 1064" during execution. Changed `) / zSales * 100);` to `)) / zSales * 100));` to properly close both the SELECT subquery and LEAST function. (sp_fill_company_stats.sql)
Apr 10 2026
- SECURITY FIX: Added page permission check to BaseController.initCommon() to prevent users from accessing pages they don't have permission to view by typing URL directly. The check is placed right after pageAuth record is retrieved, before any page initialization occurs. Previously, permission checks only existed in individual page buttons (linkButton), but users could bypass this by navigating directly to URLs. Now all page access is validated using pageAuth.CanView, and unauthorized users are redirected to Home page with an error message. This prevents potential infinite redirect loops and ensures consistent permission enforcement across the entire application. (BaseController.java)
- Added permission check to Order Buttons found in header, previously these buttons were visible to users without permission and would show an error message when clicked. Now the buttons will only be rendered for users with the appropriate permissions, improving user experience and security. (OrderItemCtl.java)
- Fix to AjaxPrint.printDepartmentContainers not cleaning the Deliveries parameter before passing to find_in_set() query, causing malformed comma-delimited delivery values. Added same validation logic as getCommaStr() to remove whitespace, extra commas, and leading/trailing commas. (AjaxPrint.java)
- Fix to redirect loop when page is missing required parameter. i.e. Order Image page missing order number would attempt to redirect to itself with the same missing parameter, causing an infinite loop. Added check for required parameters in BaseController.initCommon() and redirect to Home page with error message if missing. (BaseController.java)
Apr 09 2026
- Updated Order Packages to handle multiple group selection for filtering packages. Updated Order Package Bulk pages and Label page to handle multiple groups. (orderpkglist.jsp, orderpkglist.js, orderpkgbulk.jsp, orderpkgbulk.js, AjaxSelect.java)
- Updated Order Containers page to handle multiple group selection for filtering containers. Updated Order Container Bulk page to handle multiple groups. (orderbaglist.jsp, orderbaglist.js, orderbagbulk.jsp, orderbagbulk.js, AjaxSelect.java)
- Updated Order Department Containers page to handle multiple group selection for filtering department containers. Updated Department Container Bulk page to handle multiple groups. Update to filtering for Printing labels (orderdepartmentcontainer.jsp, orderdepartmentcontainer.js, departmentcontainerbulk.jsp, departmentcontainerbulk.js, AjaxSelect.java)
- Update to Activity page to handle new filters and queries for Containers, DepartmentContainers and Packages.
- Optimized label printing for department containers, added cache for orders, deliveries, departments, types, and rooms. Consolidated multiple print queries into one.
Apr 08 2026
- Updated Order Item page to have multi group selector filter. Updated Exports and reports to handle passing multiple groups. Updated Order Item Bulk pages to handle multiple groups.
- Added Bulk Reschedule feature to Task List page, allowing users to reschedule multiple tasks at once with checkbox selection. Users can change the date while preserving original times or update both date and time. Includes quick date buttons for Tomorrow, Next Week, and Next Month. Similar to calendar event bulk reschedule functionality. (tasklistbulkreschedulepop.js, tasklistbulkreschedulepop.jspf, tasklist.js, tasklist.jsp, TaskListCtl.java, AjaxSelect.java, AjaxUpdate.java)
Apr 06 2026
- Added Sub group creation to Intake page for departments flagged for sub group creation.
Apr 02 2026
- Added "Print Label" button to global scan popup when scanning a location barcode, item tag, or package. Users can now quickly print location, item, or package labels directly from the scan result without navigating to detail pages. (AjaxCtl.java, globalscanpop.js)
Apr 01 2026
- Refactored Add Container popup to display Note, Severity, Quality, and Handling Codes fields inline instead of in a separate Container Info popup. Removed bagInfoPop and merged its functionality into orderBagAddPop for a more streamlined user experience. (addorderbagpop.jspf, addorderbagpop.js)
- Fix: Apostrophes in string translations were being doubled when displayed in string popup editor. Fixed StringKit.format() to only apply MessageFormat apostrophe escaping when parameters are present; when no parameters, string is returned as-is. Also fixed AjaxSelect.selectString() to properly quote property names in JSON response for keys containing spaces. (StringKit.java, TromisDb.java, AjaxSelect.java)
Mar 24 2026
- Fix: HEIC image upload failing with "ERR_LIBHEIF format not supported" for certain HEIC encoding variants. Refactored HEIC conversion into a new convertOneHeicFile() method that first tries heic2any, then falls back to browser-native createImageBitmap/canvas conversion (works in Safari), and finally shows a clear actionable error message if both methods fail. (uploadimagepop.js)
Mar 23 2026
- Fix to OrderMail page not sending email through queue, and causing long wait times for page to finish loading.
- Fix to CRM send mail showing syntax error message instead of server error message when email fails to send due to invalid recipient address.
- Fix to Department Containers Pop-up not showing buttons for users without Department Locations setup.
- Added company Tags filter to CRM Company List, allowing users to filter companies by their assigned tags.
- Added Tags filter to Contact List page and Company List page.
Mar 20 2026
- Bug fix: Warehouse Heat Map search ignores special characters (apostrophes, hyphens, etc.) so names like "O'Keefe" now match when typing "okeefe". Added normalizeSearchText() helper to view that strips non-alphanumeric characters before comparing; applied to all three search sites (applySearch list mode, applySearch card mode, applyEditVolumesSearch). (warehouseheatmap.js)
- Bug fix: Dynamic location type headers (list and card mode) were showing empty content counts due to lowercase key mismatch when accumulating from getStorageCountsByType() (which returns PascalCase keys). Fixed accumulator objects to use PascalCase keys (Bag, Package, Item, Bin, Location) in getDynamicLocationsListView and getDynamicTypeCardSectionHtml. Also added Contents and Orders summary stats to Standalone location section headers in both list and card mode. (warehouseheatmaptemplate.js)
- Fix to location bulk change type not showing location types in dropdown.
- Fix to pressing "Enter" key on warehouse heat map causing the page to refresh.
- Bug fix: All/Occupied/Empty filter buttons in #warehouseHeatMapFilterButtons not working in card mode. Cards are nested inside areaCardSection wrappers, so applySearch now uses querySelectorAll('.warehouseCard') to reach them at any depth, and hides empty section wrappers accordingly. (warehouseheatmap.js)
- Added Dynamic sections to Warehouse Heat Map list view, showing dynamic locations grouped by type with content counts and capacity bars, similar to the card view. (warehouseheatmaptemplate.js)
Mar 19 2026
- Bug fix: `NumberFormatException` crash in `AjaxWizMove.scan()` when non-numeric text (e.g. "Lee") was submitted as a barcode. Added `NumberFormatException` handling to all `Integer.parseInt` call sites in `scan()` (p/o/l/t/d and tag-scan branches), returning a user-friendly error message instead of a 500 error. (AjaxWizMove.java)
Mar 18 2026
- Warehouse Heat Map: mobile-friendly layout at ≤768px — left menu becomes a horizontally-scrollable top bar, detail panel opens as a fixed full-screen overlay, menu footer (Edit Volumes) hidden on mobile. (warehouseheatmap.css)
- Warehouse Heat Map: added calendar event button to order-grouped storage contents table in location detail panel. Clicking the icon opens a new Move calendar event pre-filled with the order. (warehouseheatmap.js, warehouseheatmaptemplate.js)
- Fix to Warehouse Heat Map Volume settings not appearing for admins.
- Fix to Delete Area Location not checking for children before deleting.
- Removed/Prevented the ability for Dynamic Locations to be associated with Area Locations.
- Mailing List popup: replaced static Notify Pref label with a per-user select box so admins can change a user's notification preference directly from the listPop. Pref is saved alongside the checkbox states via the existing updateMailList call. (maillist.js, maillist.jsp, MailListCtl.java, AjaxUpdate.java)
- Added ability to create calendar event from location detail panel from Warehouse heat map
- Added quick cc order lead and sales rep checkboxes to order mail page
Mar 17 2026
web-mn:
- Bug fix: mergeCustomers — sp_merge_customer now deletes tordercustomer rows referencing f_old where f_final already exists on the same order before attempting the UPDATE IGNORE. Previously those rows were silently skipped by UPDATE IGNORE, leaving f_old still referenced and causing a FK constraint failure when deleting the old customer. Updated UsaSql/sp_merge_customer.sql.
- Warehouse Heat Map / Edit Volumes popup: Added Location Volumes as a third section alongside Container Volumes and Package Types. Locations are filtered to active, non-area, non-vehicle records, sorted alphabetically, with warehouse name shown as a sub-line under each location name.
- Warehouse Heat Map / Edit Volumes popup: Each section is now collapsible via a chevron on the label cell, reusing the existing areaCollapseArrow/areaCollapsible pattern. Sections auto-expand/collapse when a search term matches or clears results.
- Warehouse Heat Map / Edit Volumes popup: Added sticky search bar (wrapped in searchWrapper) pinned above the scrollable content. Filters rows across all three sections by name (and warehouse name for locations) with 200ms debounce and a clear button. Search resets each time the popup is opened.
- Warehouse Heat Map / Edit Volumes popup: After the first successful dimension save the Close button is replaced with a Refresh Page button (calls ir.submit()) so updated volumes are reloaded from the server. Buttons reset if the popup is closed and reopened without refreshing.
- Warehouse Heat Map / Edit Volumes popup: Save success message now includes the record name e.g. "Rack A1" saved. Added saveLocationDimensions() to AjaxCtl (sysAdmin-gated). Updated warehouseheatmap.jsp, warehouseheatmap.js, warehouseheatmap.css, AjaxCtl.java.
Mar 13 2026
web-mn:
- Warehouse Heat Map / Location Detail: Added Tasks tab. Shows when a location has >0 move tasks (FromLocation or ToLocation). Lists tasks in a table matching the warehousetasklist layout (Order, From, →, To, Due Date, Status — no Actions/Group/progress rings). Clicking a row prompts to open the Move Wizard for that task. Tab is hidden for warehouses and locations with no tasks. Falls back to Content tab if last-active tab becomes unavailable. Added getLocationMoveTasksContent() to template, openMoveTaskWizard() to view. Updated warehouseheatmap.jsp, warehouseheatmap.js, warehouseheatmaptemplate.js, warehouseheatmap.css.
- Warehouse Heat Map / List View: Added Tasks and Flags columns to the locations table in getAreaListView and getStandaloneLocationsListView. Tasks shows the count of move tasks referencing the location as FromLocation or ToLocation. Flags shows colour-coded pills (STG, OZ, DYN, CHD) using tromis.colorArray, each with a data-hover tooltip. Added getLocationTaskCount() and getLocationFlagsHtml() helpers. Added .locationFlagPill CSS class. Updated warehouseheatmaptemplate.js and warehouseheatmap.css.
- Warehouse Heat Map / Contents: Area sections are now collapsible in both list and card view. Clicking the area header toggles the section open/closed with a smooth animation. An animated arrow on the right of each header rotates to indicate collapsed state. Added toggleAreaSection() to view. Updated warehouseheatmaptemplate.js, warehouseheatmap.js, warehouseheatmap.css.
Mar 12 2026
web-mn:
- Warehouse Heat Map: Added Move button to location detail panel header. Appears beside the Edit button only when a location is open (hidden for warehouses). Clicking confirms then navigates to wizmove.jsp?startScan=L{locationId}. Added moveDetailSection() to view.
- Location Bulk / Change Capacity: Added header row number inputs (Length, Width, Height, Rail Length). Typing a valid number applies it to all row inputs in that column and auto-checks their confirm checkboxes. Updated LocationBulkCtl.java and locationbulk.js.
Mar 11 2026
web-mn:
- Warehouse Heat Map: Utilization percentage in detail panels (area, location, warehouse) now uses the capacityBadge pill style (green/amber/red) matching the card header badges. Refactored .capacityBadge CSS to be context-independent (removed .warehouseCard scope) and added .capacityBadge.capacityLow/Medium/High modifier rules so the badge colors apply anywhere in the page.
- Warehouse Heat Map: Added warehouse detail panel — clicking a warehouse name in the menu opens a detail section with Info tab (name, total volume, area/location/dynamic/staging counts) and Content tab (utilization bar with used/free, content stored icons, dynamic occupancy progress bars grouped by role e.g. "5/6 Racks", "1/9 Correls"). Added showWarehouseDetail(), getDynamicOccupancyByWarehouse(), getWarehouseDetailContent(), getWarehouseDetailHeader(). Added .warehouseDynamicRow CSS.
- Warehouse Heat Map: Added Map tab to location detail panel for vehicle locations. Tab is hidden for non-vehicle locations and shown only when location.v > 0. Map is initialised lazily on first tab switch (not during showLocationDetail) so the container is fully visible and sized before Leaflet mounts. Uses a custom L.divIcon with transportation.svg on a coloured circle background matching the vehicle's assigned colour. Popup shows vehicle name, heading, and last known address. Added currentVehicleLocation and vehicleMapInstance properties to view for lifecycle management. Map height fills the full detail panel via CSS flex chain (overflow:hidden sealed from #warehouseHeatMapDetail down through vehicleMapDiv/vehicleMapFieldWrap to #vehicleLeafletMap height:100%). invalidateSize() called on repeat tab switches.
- Warehouse Heat Map: Warehouse overview cards now show Areas, Locations, Dynamics, and Stagings counts in the subtitle (e.g., "5 Areas, 270 Locations, 9 Dynamics, 2 Stagings"). Areas, Dynamics, and Stagings are only shown when count > 0. Added getStagingLocationCountByWarehouse and getAreaCountByWarehouse model functions alongside the existing getDynamicLocationCountByWarehouse.
- irpop.js: System popups (#alertPop, #confirmPop, #errorPop, #promptPop, #toolTip) now always open centered in the viewport using fixed positioning and CSS transform instead of the offset top/left calculation.
Mar 09 2026
web-mn:
- Fixed: Data truncation error "Out of range value for column 'NewRefCoSalesPercent'" in company stats calculation. Added LEAST(100, ...) wrapper to cap all percentage calculations at 100% to prevent out-of-range errors in sp_write_comstat.sql and sp_fill_company_stats.sql.
- Warehouse Heat Map: Updated storage contents section in detail panel to group items by order with summary counts and icons (e.g., "Jones-Smith 🎒 12 bags, 📦 4 pkgs"). Summary row shows breakdown by content type with icons across all orders (e.g., "🎒 45 bags, 📦 12 pkgs across 3 orders").
- Warehouse Heat Map: Changed "Items Stored" to "Content Stored" in Capacity & Utilization section of detail panels, now displays breakdown with icons (e.g., "🎒 12 bags, 📦 4 pkgs") instead of just item count.
- Warehouse Heat Map: Simplified getCountIcons function using inline ternary operators for cleaner, more maintainable code with optional showLabels parameter for consistent icon+count display throughout the interface.
- Warehouse Heat Map: Added toggle between card view and list view modes. List view displays locations grouped by area in tables with columns for location name (clickable anchor), contents (icons with counts), % full capacity, and order count. Standalone locations displayed in separate table.
- Warehouse Heat Map: Added sortable table headers in list mode. Click column headers to sort by Location (text), Contents (count), % Full (percentage), or Orders (count). Visual indicators show sort direction (ascending/descending triangles).
Mar 06 2026
web-mn:
- Warehouse Heat Map: Building new warehouse visualization interface with card-based layout showing warehouses, areas, and locations organized alphabetically with storage counts, capacity utilization bars, and filter options (All/Empty/Occupied).
- Warehouse Heat Map: Cards display storage type icons (packages, bags, items, bins), show parent/child relationships (areas show location counts, locations show parent area), capacity calculated from dimensions with single-line summary format (X/Y used • Z free).
- Warehouse Heat Map: Detail panels show complete location information including warehouse, dimensions, barcode, capacity breakdown, and storage contents table with type icons, name/barcode on one line, and order name/number on one line with search and filtering functionality working together.
Mar 05 2026
web-mn:
- Fix to Subscription Fee resetting to default value when set to 0.
- Added bulk calendar reschedule popup to CRM My Day dashboard, calendar page, and CRM calendar section. Users can select multiple calendar events and reschedule them to a new date with quick buttons (Tomorrow, Next Week, Next Month) and option to preserve original event times.
- Added "Ozone" and "Staging" checkboxes to Add Location Wizard Details step. Special flags display in review step and are saved to LocationRec.
Mar 04 2026
web-mn:
- Fix to chat message input box resizing issues.
- Fix to Braintree report not showing all failed transactions. Added summary section.
- Fix to CRM - My Day print button not printing calendar schedule for that day.
Mar 03 2026
web-mn:
- Fixed: TypeError in calendardtlpop.js when updating Move tasks from non-calendar pages (e.g., home.jsp). Added check for view object existence before calling view.refreshTask() in updateMoveCallback.
- Add Location Wizard: Added Capacity step (step 4) with Clean/Dirty storage toggles, optional dimensions (Length/Width/Height), and hanging storage capacity with linear feet input and floor-space deduction option. Clean storage defaults selected.
- Add Location Wizard: Redesigned Review step (step 5) with single-line layout showing left-justified labels and right-justified values with border separators. Fixed display of selected departments for Department type locations.
- Add Location Wizard: Updated backend to save dimensions and RailLength to LocationRec, added validation check for duplicate names before insert, and improved button styling consistency.
- Fix to Barcode Fill packing bulk items causing error when item has too many images attached.
Feb 26 2026
web-mn:
- Added storage capability checkboxes to Add Location popup: "Can store packages" and "Can store packout containers".
- Package storage defaults to checked, packout bag storage defaults to unchecked.
- Updated createLocation in AjaxAdd.java to accept and save Package and PackoutBag fields.
- Added ability to select multiple departments when creating Department type locations in Add Location popup.
- Department selection uses consistent alp-type-btn styling with purple accent for special types.
- Department buttons displayed in grid layout matching location type button layout.
- Validates that at least one department is selected before location creation.
- Updated createLocation in AjaxAdd.java to accept and save DepartmentRows field.
- Added New Location Wizard popup to Location List page with 4-step guided flow (Placement, Category, Details, Review).
- Wizard supports creating single or multiple locations with auto-increment naming (e.g., BIN-A-1, BIN-A-2).
- Location categories: Static (fixed locations), Dynamic (mobile locations), Special (workflow-specific).
- Filters out system-only location types (Conveyor, Vehicle) from user selection.
- Added backend AJAX handlers: selectLocationAreas and selectLocationTypes in AjaxSelect.java, createLocation in AjaxAdd.java.
- Files modified: locationlist.jsp, LocationListCtl.java, AjaxSelect.java, AjaxAdd.java, addlocationpop.js, addlocationpop.jspf
Feb 24 2026
web-mn:
- Updated Move Wizard to automatically complete Move Tasks when final item is scanned.
- Fix to Scan Popup not counting scans when used from Move Wizard
- Added Generate External Photo Album Link to Image List page, added search field to External Order Album
- Fix to Order Address Export for Terra Group not using 'Primary' Order Address
Feb 20 2026
web-mn:
- Fix to Move Tasks closing future Pickups
- Added Department Containers to Warehouse Task List
Feb 19 2026
web-mn:
- Fix to Warehouse Task List not removing completed tasks for Department tasks and Pickup Tasks. Added additional checks to ensure tasks are only removed when all contents are moved away from the From Location, preventing premature removal of tasks that still have items to move.
- Fix to Metal Progetti operations page not sorting Order column correctly.
- Changed MP Operations page to not show orders if they are marked packed, instead of marked shipped.
- Added search functionality to MP Operations page allowing users to search by order name.
- Added table sorting to Warehouse Task List page
Feb 18 2026
web-mn:
- Fix to Group Default records not validating name field before creation.
- Fix to WizLoad not showing correct location status for containers.
- Fix to WizLoad not marking storage only containers as loaded.
Feb 17 2026
web-mn:
- Fix to Pickup move tasks changing "From Location". Omitted pickup type move tasks from changing From Location when all contents have been moved away from the original From Location.
- Added Move task status "Arrived" for Pickup moves that are associated with calendar events when calendar event is marked arrived.
- Added Company Tags to CRM on list page, added ability to search and filter company tags.
- Optimized Order Container page for orders with large amounts of images, improved list query performance by adding index on Sort parameters.
- Fixed incorrect Tagging Backlog count on ScoreCard due to TotalLoss, Storage, Estimate and InHome Delivery groups being considered for tagging.
- Fixed "Uncaught ReferenceError: recb is not defined" error in wizloadmodel.js: corrected typo in 4 filter functions (getLoaded, getStaged, getToStage, getToLoad) where recb.b was incorrectly used instead of b.recb (receivedBy property) when filtering bags (wizloadmodel.js)
- Fixed "Data truncation: Out of range value for column 'DirectPercent'" error in sp_write_comstat by adding LEAST(100, ...) wrapper to cap percentage calculations at 100% for NoFreePercent, DirectPercent, ProgramPercent, NARDPercent, TopRefCoPercent, and TopBillToCoPercent. Prevents database errors when data inconsistencies cause calculated percentages to exceed valid range. (sp_write_comstat.sql)
Feb 09 2026
web-mn:
- Added automated warehouse task creation for department package putaway: when packages are completed at department locations (e.g., hand cleaning, laundry), system now automatically creates MoveRec tasks to prompt warehouse staff to move packages from department to storage locations. Tasks are grouped by delivery group + department combination, appear on warehouse task list with factory icon, and auto-complete when packages are stored or location changes. Includes performance index on (SiteNum, GroupRow, DepartmentRow, Done) for efficient task lookups. (MoveRec.java generateFromDepartmentPackage(), AjaxCtl.java completePackage(), OrderPkgRec.java afterUpdate(), LoginDb.java startup40CheckColumns(), warehousetasklist.js, warehousetasklist.jsp)
Feb 06 2026
web-mn:
- **CRITICAL FIX**: Centralized email header construction to fix notification emails being blocked by recipient mail servers. NotificationTrigger now uses MailMsg constructor pattern matching OrderReporter, ensuring consistent From addresses, proper SPF/DKIM alignment, and removing problematic Reply-To header that was triggering spam filters. Both email paths now share same centralized header logic in MailMsg class. (NotificationTrigger.java)
- Fixed IndexOutOfBoundsException in LocationBulkCtl when displaying parent area names. (LocationBulkCtl.java)
- Fixed checkIsAllAtFinalDestination logic in Move Wizard: when ToLocation and ToWarehouse are both 0, now properly checks that content has moved away from FromLocation instead of leaving check incomplete (wizmovemodel.js)
- Fixed Move Wizard status buttons triggering prematurely: checkIsAllPrepared, checkIsAllStaged, and checkIsAllOnVehicle now exclude items still at FromLocation, preventing Mark Prepared/Staged/Loaded buttons from enabling when items haven't actually moved yet (wizmovemodel.js, wizmovesteps.js)
Feb 04 2026
web-mn:
- Optimized Warehouse Detail page performance by converting contents loading from server-side to client-side AJAX: contents now load on-demand when user clicks the Contents tab, reducing initial page load time especially for warehouses with many stored items (warehousedtl.jsp, AjaxCtl.java getWarehouseContents(), WarehouseDtlCtl.java)
- Added user initial icons to vehicle sections in warehouse task list: displays assigned driver's initials with their custom color scheme next to vehicle name in vehicle headers, clicking icon opens user info popup (tromis.js getUserIconHtml(), warehousetasklist.js getVehicleWrap(), UserRec.java getJsonForWarehouseTaskList(), WarehouseTaskListCtl.java)
- Added warehouse location display in vehicle sections: when a vehicle is within 0.25 miles of a warehouse, displays warehouse name with barn icon instead of street address (tromis.js, warehousetasklist.js)
- Added distance calculation utilities: getLatLngDistance() using Haversine formula and getWarehouseAtLocation() to find nearby warehouses (tromis.js)
- **CRITICAL FIX**: Calendar events were not syncing completion status with pickup events, causing data inconsistency between calendar and pickup records (CalendarTask.java)
- Fix to Item Received count not displaying correctly on Pickup Calendar events
- Fixed IndexOutOfBoundsException on Location List page when a location has a parent area that no longer exists: added safety check to verify parent location exists before accessing it (LocationListCtl.java)
- Fixed "TypeError: null is not an object (evaluating 'w.n')" in movedetailpop.js: warehouse lookups now properly handle null returns by keeping default empty object instead of overwriting with null (movedetailpop.js - buildBags, buildDcs, buildItems, buildPkgs)
- Fix to warehouse detail page truncating LNG LAT precision to 0 decimal places: updated to use 6 decimal places for more accurate location display (warehousedtl.jsp)
Feb 03 2026
web-mn:
- Optimized room image display on Order Room page to show only first 10 images per room with a "more" link that navigates to the Image List page filtered by order and room, improving performance for rooms with 1000+ photos (OrderRoomCtl.java)
- Fixed "Uncaught TypeError: del.updateLoad is not a function" error in wizload when completing deliveries: added Delivery.wrap() calls in completeDelivery(), updateDelivery(), and afterUpdateDelivery() to ensure delivery objects are properly wrapped as Delivery class instances with all required methods before calling updateLoad() (wizloadmodel.js, wizloadview.js)
- Fixed "All Users" checkbox not toggling properly on calendar filter: removed double toggleFilterMenu() calls that were closing and immediately reopening popup, simplified logic to properly read checkbox state after it's clicked, and removed redundant condition checks (calendarview.js)
- Fixed "Element leafMap not found" console error when filtering users on calendar page: added null check to verify leafMap element exists before checking visibility in onFilterChange() function (calendarview.js)
- Fixed "Cannot read properties of null" error in locationpop.js: added null check for warehouse object in button() function and fixed curLocation type handling in find() function to support both object and primitive values (locationpop.js)
- Added order rejected, order archived and order status check for warehouse task list when generating and completing tasks (MoveRec.java)
- Implemented destination assignment popup for warehouse tasks: MoveTasks without ToWarehouse now display "assign" link that opens popup allowing users to select warehouse and optional location. (warehousetasklist.js, warehousetasklist.jsp, AjaxUpdate.java)
Feb 02 2026
web-mn:
- Implemented automatic vehicle location tracking integration with Verizon Connect API: created VehicleLocationMonitorTask that polls vehicle locations every 10 minutes and updates lat/lng coordinates in VehicleRec (VehicleLocationMonitorTask.java, VerizonRest.java)
- Enhanced vehicle tracking to capture additional location details from Verizon API: now saves LastAddress (street address), Direction (numeric degrees 0-359), and Heading (text direction like "North West") along with coordinates for better context and reporting (VehicleRec.java)
- Added intelligent move status transitions for pickup operations: when a pickup calendar event is marked done, moves now transition to "Transit" status if the vehicle has Verizon tracking (FleetApiId set), or directly to "Ready" if no tracking. Moves in Transit automatically transition to Ready when the vehicle arrives within 0.5 miles of ANY active warehouse (MoveRec.java, AfterCalendarUpdateTask.java)
- Enhanced MoveRec.beforeWrite() to intelligently set pickup move status based on real-time vehicle location: checks if vehicle is already at a warehouse when pickup completes, sets Transit only if vehicle is tracked and NOT yet at warehouse, immediately sets Ready if vehicle is already at warehouse or has no tracking (MoveRec.java)
- Added Transit status to MoveRec.MoveStatus enum to track vehicles en route to warehouses between pickup completion and warehouse arrival (MoveRec.java)
- Implemented warehouse proximity detection: added distanceToWarehouse() and isAtWarehouse() methods to VehicleRec using Haversine formula to calculate distance between vehicle and warehouse coordinates (VehicleRec.java)
- Created MoveRec.checkVehicleArrivals() method that queries moves in Transit status and checks if vehicles are at any active warehouse (not just FromWarehouse, since pickup moves don't have ToWarehouse set). Auto-populates ToWarehouse when vehicle arrives (MoveRec.java)
- Added configurable constants PROXIMITY_RADIUS_MILES (0.5) and POLLING_INTERVAL_MINUTES (10) to MoveRec for easy adjustment of tracking sensitivity and frequency (MoveRec.java)
Jan 30 2026
web-mn:
- Implemented special completion logic for pickup moves: items are now considered received (at destination) when they leave the vehicle location AND are not moved to another vehicle, ensuring they've truly been received into a facility location. Move tasks for pickups will auto-complete when all items are scanned to non-vehicle locations (MoveRec.java)
- Enhanced Move Record sync to auto-update FromWarehouse and FromLocation when all contents are detected at the same location: if user sets only warehouse initially or if contents are moved outside the move wizard, the system now automatically updates both fields to reflect the actual common location when syncing (MoveRec.java)
Jan 29 2026
web-mn:
- Fixed calendar filter settings not persisting when navigating away and returning: modified toggleFilterMenu to save settings when closing popup, added missing HideAutoFollowups field to saveCalendarSettings, and updated to use UserPageRec.put() for proper cache refresh across all user sessions (calendarview.js, AjaxUpdate.java)
Jan 28 2026
web-mn:
- Added comprehensive JavaDoc documentation to StringKit.java: documented all public methods with descriptions, parameter explanations, return value descriptions, and exception information where applicable
- Fixed "The filename, directory name, or volume label syntax is incorrect" error in downloadImages: now properly sanitizes insured name using FileKit.cleanFileName() before using it in zip filename (AjaxCtl.java)
Jan 27 2026
web-mn:
- **PERFORMANCE**: Optimized Move Wizard when loading contents for Location instead of Order
- Warehouse Task List now persists filter settings to session storage: filters (task type, movable type, vehicle, warehouse, grouping options, search text) are automatically saved and restored when returning to the page (warehousetasklist.js)
- Added "Pickup" Events to Warehouse Task List
Jan 26 2026
web-mn:
- **PERFORMANCE**: Optimized calendar detail popup image loading for events with 1000+ images: implemented batch rendering (50 images at a time) with cancellation flag to immediately stop downloads when popup closes, reducing unnecessary bandwidth and server load (calendardtlpop.js)
- Update to Activity Report, removed Loaded Packages from Un-stored Packages section
- Fix to Metal Progetti packages not being assigned to location if assembly arm is set to 0, enforced default assembly arm from company settings
Jan 23 2026
web-mn:
- **PERFORMANCE**: Fixed OrderPkgAddRow.selectList slow query (1.2s → 0.01s): Created index tOrderHov_iDelivery on (sitenum, delivery, row)
- Fixed JavaScript syntax error on orderbag.jsp when customer name contains apostrophe (e.g., "O'Keefe"): properly escape order name using jsq() method (OrderBagCtl.java, orderbag.jsp)
- Fixed "Cannot read properties of null (reading 'Referrer')" error in afterCustomerPop: added null check for customer object before accessing customer.Referrer property (orderdtl.js)
- Fixed "Maximum call stack size exceeded" error on iPhone Safari in calendar: removed unnecessary getTime() call in Task constructor, improved getInsured() null handling, added safety checks in isFirm() method (calendartask.js)
Jan 22 2026
web-mn:
- Fixed home page drag and drop: prevented drops into priority buttons section, prevented dragging the More button, and enabled dropping into empty mainButtons section (home.js)
- Fixed home page button layout not saving correctly due to cache synchronization issue. UserPageRec now returns copies from cache to prevent stale data (PageSettingCache.java, UserPageRec.java)
- Increased ClaimMailReader IMAP timeout values from 10 seconds to 60 seconds to prevent SocketTimeoutException errors when reading from Office 365 mail server
- Fix to HOV event triggering duplicate name error when creating HOV event for delivery from calendar
Jan 21 2026
web-mn:
- Fixed Move Detail Popup to maintain checkbox selections when filtering content
- Fix to duplicate InHome and HOV events appearing on calendar
- Fix to InHome items appearing on Order Storage page and fix to order article afterUpdate creating storage records for InHome items
- Fix to Bulk Item page reverting checkboxes after error, fix to checkboxes defaulting to on and added error message when delete reason is not provided
Jan 20 2026
web-mn:
- Updated Order Detail Popup Storage Summary to have collapsible warehouse sections
- Updated Order New page and Order Detail page, added field for "Marketing Referral Source"
- ClaimMailReader improvements:
- **PERFORMANCE**: Optimized ClaimMailReader.writeAttachmentFile() to use two-pass approach: pre-fetch all attachment data from mail server into memory, then write to ZIP file
- Increased buffer sizes from 128KB to 512KB for mail server downloads to reduce network round-trips and improve throughput
- Disabled ZIP compression for already-compressed formats (JPG, PNG, GIF, PDF) using NO_COMPRESSION - provides massive performance gain with no quality loss
- **RELIABILITY**: Enhanced ClaimMailReader error handling to continue processing remaining emails after errors instead of stopping
- Added message tracking (by Message-ID) to prevent reprocessing messages after connection failures
- Added detailed error logging showing which message number failed and progress through message queue
- Improved error recovery with automatic retry logic and skip-already-processed functionality
Jan 19 2026
web-mn:
- **CRITICAL FIX**: Fixed ClaimMailReader IMAP connection failure (E3 BAD Command Error. 12) with Office 365 OAuth2 authentication
- Created OAuth2Authenticator class to properly handle XOAUTH2 SASL mechanism for JavaMail with Microsoft 365
- Updated getSessionImapOAuth2() to create session with OAuth2Authenticator instead of passing token directly to connect()
- Added complete IMAP session properties: mail.imaps.host, mail.imaps.port (993), mail.imaps.ssl.protocols (TLSv1.2), and connection timeouts
- Modernized home page icon drag-and-drop with automatic saving, smooth animations, and visual feedback (hover highlights, transparency effects, faster transitions)
- Fixed drag-and-drop swap logic to work correctly in both directions and handle nested/wrapped buttons properly
- Corrected icon ordering on page load by sorting buttons by their saved order values before rendering, preventing incorrect position assignments after drag operations
Jan 16 2026
web-mn:
- **PERFORMANCE**: Added new selectListByLocation() and selectReaderByLocation() methods to OrderStorageRow for location-based queries
- Added selectReaderByLocation SQL query optimized to filter by location first instead of after union, reducing rows scanned
- Changed UNION to UNION ALL in OrderStorageRow queries (eliminates unnecessary duplicate removal since Item/Bin/Bag/Package types cannot duplicate)
- Reordered joins in OrderStorageRow queries to prioritize filtering tables for better query execution plans
- Migrated LocationDtlCtl.java to use selectListByLocation() for faster location detail page loads
- Migrated ActivityCmd.java to use selectListByLocation() for faster activity page with vehicle locations
- Migrated LocationRec.java to use selectListByLocation() for faster location info/tooltips
- enhanced error handling in ClaimMailReader to provide detailed diagnostic information for Office 365 connection failures
- improved error messages to include host, user, protocol, authentication token status, and root cause information
- enhanced AzureAuthentication.getToken() with comprehensive error handling and validation
- improved error logging in ClaimMailReader.runTask() to print full stack traces on dev boxes
- fix to discrepancy in vehicle storage counts on home page vs. vehicle detail popup
- added overnight routine to remove item locations for packed items
- updated bcfill pack step to remove item locations when packing items
Jan 15 2026
web-mn:
- fix to calendar redraw task error after update
- **CRITICAL FIX**: Fixed image upload handling to check actual file extension instead of UUID filename, preventing unnecessary conversion attempts that were causing "Failed to get image from file" errors for HEIC-converted images
- Changed server-side image extension from 'jpeg' to 'jpg' for consistency with client-side HEIC conversion
- Added validation and logging for HEIC/HEIF file conversion to detect corrupted conversions
- Enhanced JImage error messages to show data preview when ImageIO.read() fails
- fix to intake2 "Cannot read properties of undefined (reading 'im')" error when viewing items with no tags
- improved syncing deliveries with move tasks
Jan 14 2026
web-mn:
- added support for HEIC/HEIF image file uploads with automatic client-side conversion to JPEG
- updated move tasks to not generate when delivery is not packed
- fix to move task status not changing when items are moved
- fix to driver name error on delivery detail popup
- fix to refresh move task not using correct markup
- added warehouse name to locations on move wizard
- update to move wizards task buttons
Jan 13 2026
web-mn:
- fix to Move Wizard not showing moved contents correctly when only "To Warehouse" is selected
- added status counts to warehouse task list
- fix to non-production items appearing in Activity - Unreceived Items list
- fix to Full Album not sorting photos by room
Jan 12 2026
web-mn:
- optimized ExcelWriter class for large dataset exports (Zip Codes Export)
- updated move task to include calendar vehicle where applicable
- added overnight routine to auto complete warehouse move tasks
- updated create site stored procedure for innoDb compatibility
Jan 09 2026
web-mn:
- added "Dry Cleaner" company type to company detail popup and company new page
- fix to CRM company popup not saving company email correctly
- added calendar event action buttons to warehouse task list with type-specific icons (pour.svg for Move, truck.svg for Delivery)
- implemented smart refresh functionality for warehouse task list rows
- refactored storage-related fields into abstract StorableRec base class for code reuse
- moved common storage fields (LoadedAt, LoadedBy, StagedAt, StagedBy, StoredAt, StoredBy, ReceivedAt, ReceivedBy, Location) to StorableRec
- updated OrderPkgRec, OrderBagRec, OrderDepartmentContainerRec, and OrderArticleStorageRec to extend StorableRec
- added automatic timestamp management in StorableRec.beforeUpdate() for storage lifecycle events
- renamed OrderPkgRec.StoredOn to StoredAt for consistency
Jan 08 2026
web-mn:
- created warehouse task list page with dynamic filtering and grouping options
- added centralized filterData function to handle warehouse, vehicle, task type, and movable type filters
- implemented search functionality across order name, group, vehicle, driver, warehouse, location, status, and date
- added group by date and group by vehicle toggle options with dynamic header title display
- added warehouse and vehicle filter buttons that auto-populate based on tasks in data
- added [none] button for tasks without assigned vehicles
- implemented animated chevrons for collapsible sections (type wrap and vehicle wrap)
- added smooth CSS slide animations for expanding/collapsing sections
- separated location display into From/To columns with arrow between them
- added filter to automatically exclude tasks scheduled during midnight hour (00:00-00:59)
- fixed HTML structure issues with proper closing of typeWrap and vehicleWrap divs on warehouse task list page
Jan 06 2026
web-mn:
- fix to load wizard not loading package when to location is not assigned
- fix to calendar recurrence "Every" field resetting to first entered value
Dec 19 2025
web-mn:
- removed IsAuto filter from Order Department Container List page, no longer applicable and causing errors
- updated metal progetti package location to ARM 1 by default, if arm location is not received.
- update to Load wizard added summary to done step
Dec 18 2025
web-mn:
- updated to wiz load, added prepping and staging steps, added link to move wizard, updated to handle dynamic locations
Dec 12 2025
web-mn:
- fix to adding new order error when sales rep is null
Dec 11 2025
web-mn:
- fix to order sales rep not being assigned from order new page
- fix to referring company sales rep not being assigned to order after updating company on order
Dec 10 2025
web-mn:
- fix to system generated package types (HOV and Item) not appearing in location rules
- removed service[s] groups from Order Container Detail page select group drop down
- added "Storage Only" to Order Milestones
Dec 09 2025
web-mn:
- fix to adding room on intake page not updating order graph cache
- update to calendar move event, added done counts, and improved syncing status, enable/disable buttons
- fix to load wizard not saving vehicle location
- updated bulk load/deliver to include optional vehicle entry
- updated bulk load/deliver to pull in delivery group assigned vehicle as location for package
- fix to package list page not showing storage locations on filter for loaded packages
Dec 08 2025
web-mn:
- fix to metal progetti incorrect ARM/Location assignment
- fix to search missing pages for "labels"
- added "Move Status" and "Move Counts" to Calendar Move events
Dec 05 2025
web-mn:
- fix to moveWizard camera scan not returning scanned value correctly
- removed order location restrictions from entire system
- fix to vehicle locations to being set to Type="Vehicle"
- fix to warehouse error on calendar move detail popup when container does not have a location assigned
- fix to order items not appearing on move task if not stored
- attempted fix to moveWizard sizing on iPhones
Dec 04 2025
web-mn:
- fix to table sizing issue in move wizard
- updated item quantity to show single items when dealing with "footage" units
- fix to missing ranks on score card page
- removed caching of order graph, due to data becoming stale
- updated move wizard location picker to show relavent locations
- added alert popup when move task does not have content to move
Dec 03 2025
web-mn:
- fix to missing pages from global search
- fix to content count appearing on wrong side of move task
- updated storage used on move wizard to sort by delivery group
- added back button to all wizards
- updated move wizard filter button to function accordingly
- updated move wizard filter step to automatically proceed after selecting to location
- added "Tagging" flag to department records
- updated intake page to use department locations when tagging and creating department containers
Dec 02 2025
web-mn:
- enforced adding move details to calendar event detail popup
- added storage summary to move wizard done step
- fix to Activity - unstored containers not checking for order tagged status
- updated global scan popup to include link to move wizard
Dec 01 2025
web-mn:
- added link to move wizard from calendar event
- added type filter to move wizard filter step
- fix to move wizard not showing all applicable department containers
- added status update to move wizard complete step
Nov 28 2025
web-mn:
- minor client side fixes to moveWiz complete step
- fix to delivery detail popup error when loading vehicle name
- fix to deadlock on calendar query
Nov 26 2025
web-mn:
- added saving customers email when signing documents
- added driver and vehicle to delivery detail popup
- fix to storage summary not including load children
Nov 25 2025
web-mn:
- removed package order restriction
- added warehouse inactive filter and vehicle inactive filter
- added location bulk change name
- added package location summary to delivery detail popup and delivery calendar events
Nov 24 2025
web-mn:
- moveWiz: added enum for triggers to handle auto creation of task events, added enum to handle move status
- fix to order issue section causing page to scroll horizontally
- update to location list page
- added bulk change warehouse
Nov 21 2025
web-mn:
- moveWiz: removed all words with "content" from wizard
- fix to images records saving without name, added uuid fallback, wrote script to update database
- fix to merge contact and customer after fixing column name letter casing issue
- fix to metal progetti lot number change causing conveyor records to not update after bagging
Nov 20 2025
web-mn:
- moveWiz: added dynamic location scanning, added storage used table, added to home page
- crm: fix to customer last visit date not updating in real time when logging for contact
- fix to multiple item storage records duplicating items on lists
Nov 18 2025
web-mn:
- wrote script to fix letter casing on column names in database (innodb aftermath)
- re-added item usage to item dtl page, added link to lookup tag for more detail
- updated lookup tag page to have option for item
Nov 17 2025
web-mn:
- building moveWiz: finished complete step, add camera capability, added skipping steps, sounds and messages, summary section
Nov 14 2025
web-mn:
- building moveWiz: move function for packages,items,containers and dcs, fix to items not appearing on task
- fix to calendar move detail popup not showing all applicable packages and dc
- fix to calendar move detail popup missing warehouse name
Nov 13 2025
web-mn:
- fix to negative delivery number error from app
- building moveWiz: added scan page, created tables for "tomove" and "moved" contents
Nov 12 2025
web-mn:
- fix to metal progetti deleting order after split, re-added "SPLT" suffix and removed hyphens to make room for item
- building moveWiz: added start scan capability, added check for active task
Nov 11 2025
web-mn:
- building moveWiz: content, content filter, task locking, locations filters, group room pop none button,
Nov 10 2025
web-mn:
- building moveWiz: order picker, group picker, room picker, task override, content table
- fix to Order Group document error caused by taxable field
Nov 07 2025
web-mn:
- updated order bill to show taxable amount, updated queries to pull down taxable items, added taxable fields to order bill popup and record
- update/fix to metal progetti counts and sending logic, fix to un-hangable items on list popups
Nov 06 2025
web-mn:
- fix to Contact Referral Source error
Nov 05 2025
web-mn:
- added Referral Source and Welcome Marketing flag to contacts - updated on all pages and popups
- fix to Order Container, Room Location filter not initializing correctly, fix to filter popup stretching hiding Type filter
Oct 28 2025
web-mn:
- added 'enforce department containers' when packing
- re organized company settings page, added more sub-sections, added api tab, merged defaults and control tab into control tab
- fix to query errors when selecting data for maps
Oct 27 2025
web-mn:
- fix to Google Geo Location error when viewing Member info
- fix to calendar error when updating attendee list
Oct 24 2025
web-mn:
- fix to packages list not paging correctly
Oct 20 2025
web-mn:
- fix to twilio timeout lock
- added departments to location records for warehouses with "Packing" enabled
Oct 16 2025
web-mn:
- fix to client side javascript errors on orderitem.jsp page
- fix to move package restrict locations not checking for dynamic location
- fix to status sequence on package detail popup
- added all checkboxes to location bulk page flags columns
- added counts to move records for calendar status
- fix to global scan not removing barcode after scanning
Oct 15 2025
web-mn:
- added dynamic locations to allowed locations for all orders, BCMove fix
- updated wiz load combine delivery message and fix to error after combine
- updated container and item filtering to use single filter class
- fix to package location rules for system package type "Item"
Oct 10 2025
web-jc:
- track page stats for binary image uploads as ajax_addimagebinary
Oct 07 2025
web-mn:
- update to package filtering added single class to handle filter
- update to container filtering added single class to handle filter
Oct 06 2025
web-mn:
- fix to order price not updating after each tag
- fix to inconsistency in tagging backlog
- fix to intake page downloading delivery groups twice
Oct 03 2025
web-mn:
- add ability to scan dynamic location to BCMove page
- updated BCLoad to to have location picker/scanner instead of drop down menu
- fixed storage summary for orders showing packed items
- updated some detail popups to use newer icon/text buttons
Oct 02 2025
web-mn:
- fix to crm log order filter not working causing error
- fix to vehicle intializing error on caledarview.js
- fix to null error on receive department container popup
- fix to content records caching incorrectly
Sep 30 2025
web-mn:
- updated BCLoad confirm scanning dynamic location
- fix to calendar events not showing children counts
- fix to location scan popup showing incorrect "Stored Days" count
- added ability to mark locations as department locations (multi select)
Sep 24 2025
web-jc:
- improve performance of ajax_synctagswithmetalprogetti
- improve performance of ajax_selectlastreferral
Sep 22 2025
web-mn:
- fix to javascript error on crm detail pop when selecting [none] for company
Sep 20 2025
web-jc:
- change imageuploadpop.js to use binary upload for snapshots and images whose
size must be reduced
Sep 19 2025
web-mn:
- updated counts on task map page
- added ability to load dynamic locations from bcload page
Sep 18 2025
web-jc:
- reworked ajax_addcontact to submit work after contact creation
- reworked ajax_addcustomer to submit work after customer creation
- reworked app_logerror to submit notification work
Sep 18 2025
web-jc:
- hot-patched ordercustomerdtlpop.js for null cust error
- hot-patched sp_wiz_load.sql for duplicate key error
- changed ajaxadd_customer such that company missing email is deferred
web-mn:
- fix to add location error
- fix to calendar event merging user and attendee initials
- fix to incorrect location being assigned to metal progetti packages
Sep 17 2025
web-jc:
- removed logic related to MyISAM tables from Instruction copy routines
- created but did not activate faster version of ajax_updateCalendar
- created faster version of ajax_sendArticlesToMetalprogetti and put flag on company to activate it
- hot-patched orderflagpop.js for null self.data error
- hot-patched pickcuscon.js for self.customerName error
- moved ajax_synctagswithmetalprogetti to it's own class to enable easier refactoring for speed
web-mn:
- removed size field from packages,containers and locations replaced with width,height,length
- added location bulk page 'change capacity'
- updated sp_set_location_counts to handle new dimensions
- updated package type, containertype and location detail pages to handle new dimensions
- updated location list page to show new capacity
- added location capacity to location detail popup
- fix to integer unique index on location table causing errors
- updated company after update to handle adding conveyor arm locations automatically
Sep 16 2025
web-jc:
- hot-patched bcload.js with fix for js error
- hot-patched locationbulk.js with fix for js error
- fixed calendarview.js but could not patch
web-mn:
- simplified bcload to only allow moving packages from staging/dynamic locations
- added conveyor arm location records
- update metal progetti to automatically assign conveyor arm locations to packages
Sep 15 2025
web-mn:
- added bulk change flags for Locations
- updated load wizard to allow scanning of locations (dynamic and staging)
web-jc:
- changes to intake2ctl and some of the methods called from there to reduce slow hits
- tuneup of ajax_addContact to reduce slow hits
- hot-patched crmgrouppop.js with fix for add customer callback
- hot-patched crmtemplate.js with fix for js error
- hot-patched pickcuscon.js with fix for startSwirl error
Sep 12 2025
web-mn:
- update location filtering, created class to pass multiple parameters
- added location bulk page
--- ability to bulk change location types
web-jc:
- hot-patched ordernew.js with fix for add customer callback
- hot-patched intake2pop.js with fix for null article.xact attribute
- deferred calendar delete task to eliminate slow hits
- tuned OrderDtl to defer some selections until write step,
optimized some string building
Sep 11 2025
web-jc:
- hot-patched orderbag.js with fix for adding bags
- hot-patched calendartask.js with fix for attendee list
- separate counting tags for bags from delivery and room for speed
- optimized IntakeTag.selectJson to reduce slow hits on intake
web-mn:
- updated location records added staging table
- updated wiz load added/updated staging ability
- fix to load wizard not resetting when user un-loads package
Sep 10 2025
web-jc:
- defer some work from ajax_updateCalendar to a scheduled task to reduce slow hits
web-mn:
- updated location records and pages to handle dynamic locations, added location types
Sep 9 2025
web-mn:
- fix to AutoDC items from Processing Departments being automatically loaded onto Pickup Vehicles
- fix to null pointer exception on orderDtlCtl -> request.getReferrer()
- fix to excel max cell length error for CrmLogExport
Sep 8 2025
web-jc:
- change data selection under Home->CRM Logs to a paged mechanism to reduce slow hits
- move ajax_updateCalendar code to its own class to facilitate review/maintenance/optimization
web-mn:
- fix to wiz load checking service groups for combine
- fix to crm popup checking all contacts when creating crm log from recent logs list page
- added staging flag to location records
- fix to internal notes not showing who was notified
Sep 4 2025
Web:
- mn: fix to completing Containers from Intake page not working
- mn: fix to erroneous text messages and email for calendar events from devbox
- mn: fix to incorrect user being assigned to contact followups in overnight routine
- mn: fix to calendar times not adjusting due to incorrect date time picker index
Sep 3 2025
Web:
- mn: fix to order counts (tags) accumulating
- mn: fix to item links on intake page not fetching correct item
Sep 2 2025
web-jc:
- tuning to eliminate unnecessary calls to count bag tags
db-jc
- temporarily removed foreign keys tOrderPackageEvent->tOrder and tOrderPackageEvent->tOrderPackage because for some strange reason there
are HovTake events being posted without an order id or a package row like:
----- insert into tOrderPackageEvent set Event=1014,Note='Tag 78',OrderRow=0,Package=0,Time='2025-09-02 11:33:38',Type='HovTake',User=12
- this is either a bug or a misfeature
Sep 1 2025
Db - jc:
- removed foreign keys to accommodate delete events and restored delete event records from b4fk
--- tOrderArticleEvent, tOrderBagEvent, tOrderDeliveryEvent, tOrderDepartmentContainerEvent
Aug 30 2025
Db - jc:
**
** data saved to schema b4fk in case I misunderstood data relationships
**
- added foreign keys:
--- tOrderAddress,tOrderArticleEvent,tOrderArticleStorage,tOrderBag,tOrderBagEvent,tOrderBagIns,
tOrderBill,tOrderCharge,tOrderContact,tOrderContactAttempt,tOrderCustomer,tOrderDeliveryEvent,
tOrderDeliveryRoom,tOrderDepartmentContainer,tOrderDepartmentContainerEvent,tOrderEstimateItem,
tOrderEvent,tOrderExt,tOrderHov,tOrderIns,tOrderIssue,tOrderLocation,tOrderMaterial,
tOrderPackageEvent,tOrderPickup,tOrderReviewNote,tOrderTally,tOrderTax,tOrderTime,
tOrderTotalLossItem
------> tOrder: update/delete cascade
--- tOrderBagEvent,tOrderBagIns -> tOrderBag: delete cascade
--- tOrderContactAttempt -> tOrderContact: delete cascade
--- tOrderCustomer -> tCustomer: delete restrict
--- tOrderDeliveryEvent -> tOrderDelivery: delete cascade
--- tOrderDeliveryIns -> tOrderDelivery: delete cascade
--- tOrderDeliveryRoom -> tOrderDelivery: delete cascade
--- tOrderDeliveryRoom -> tOrderRoom: delete cascade
--- tOrderDepartmentContainerEvent -> tOrderDepartmentContainer: delete cascade
--- tOrderEstimateItem -> tOrderDelivery: delete cascade
--- tOrderEstimateItem -> tOrderRoom: delete cascade
--- tOrderEstimateItem -> tArticle: delete restrict
--- tOrderHov -> tOrderDelivery: delete cascade
--- tOrderHovItem -> tOrderHov: delete cascade
--- tOrderHovItem -> tOrderArticle: delete cascade
--- tOrderHovPkg -> tOrderHov: delete cascade
--- tOrderHovPkg -> tOrderPackage: delete cascade
--- tOrderHovPkg -> tOrderDelivery: delete cascade
--- tOrderIns -> tInstruction: delete restrict
--- tOrderLocation -> tLocation: delete restrict
--- tOrderMaterial -> tArticle: delete restrict
--- tOrderPackageEvent -> tOrderPackage: delete cascade
--- tOrderTax -> tTaxCode: delete restrict
--- tOrderTime -> tArticle: delete restrict
--- tOrderTotalLossItem -> tArticle: delete restrict
--- tOrderTotalLossItem -> tOrderDelivery: delete cascade
--- tOrderTotalLossItem -> tOrderRoom: delete cascade
Aug 28 2025
Javascript - jc:
- fixed error on image list and hot patched
Aug 27 2025
Java - jc:
- added CHAR,VARCHAR,SIGNED,UNSIGNED to SqlQuoter NON_COLUMN_KEYWORDS to prevent convert(xxxx,`char`) type error
- added MemoryWatch summary to ElevenPM command statistical dump
- reduced jvm max memory allocation to 6Gb as too much can cause long gc pauses
- added pre-emptive select by name to AppCtl.addDelivery to avoid dup name exceptions
- sp_change_order added update to sequence dispenser tSeq in case new order number is higher
- removed last package number hack from tOrderPackage.deleteEmpties
--- because it is no longer necessary with InnoDb AND it breaks foreign key
- review and update of TODO tags in code for use in General Task View
- changed OrderRec.countForPage to only join to tables referenced in the filters
Javascript - jc:
- used elvis operator on self.users of oPickupPop in addorderpickup.js to avoid NPE
- added NPE guard for events to notificationPop.initNotification callback handler
- added NPE guard to calendar dtlPop.updateCallback for delivery name
- added pleaseWait and stopWaiting to image list load because one set of errors
suggested that Kelly Maliniak clicked somewhere before page was fully loaded
Aug 26 2025
Db - jc:
- added foreign keys
--- tOrder -> tCustomer on delete restrict
--- tOrderArticle,tOrderPackage,tOrderDelivery,tOrderRoom,tOrderNote -> tOrder
----- all on delete cascade on update cascade
--- tOrderPackageItem -> tOrderArticle on delete cascade
--- tOrderPackageItem -> tOrderPackage on delete cascade
Web - jc:
- change calendar selection filter sequence to favor those that can use indexes
- change order selection filter sequence to favor those that can use indexes
- increase size of temp contacttype column in select_terra_contacts to fix truncation error
Aug 25 2025
Web - jc:
- made MyCrypt.decryptHex more fault tolerant
- steps to avoid deadlocks on OrderTagCounter.updatePackServices
- made irdate.friendly(d) return safely if non-date argument passed in
Aug 24 2025
Web - jc:
- changed select_terra_contacts stored procedure to stop using memory tables because we got
"temporary table is full" error
Aug 23 2025
Web - jc:
- whoison: separated average page load time to its own graph
--- added current day's stats to all graphs
--- changed date format on x axis labels to weekday month date wmd
- since OrderRec.selectFilterCount is 30% of db time today:
--- changed logging key from OrderRec.selectFilterCount to OrderStatusCount??? so we can isolate slowpokes
--- changed count join on customer contact to inner for Commission_Due and Referral_Due
--- changed count join on gclaim to inner for Portal_Claim
--- made count selection specific to filter to exclude tables not referenced
Aug 22 2025
Web - jc:
- built 'stepped' path for updating counts on delivery,room,tag records to reduce deadlocks
- use Thread.setName on OrderTaskQueue to track which order is currently being processed
- added filter suggestion to calendar for selections yielding more than 3,000 tasks
- reworked sp_wiz_load for speed as wizloadctl_get as top time user today
Aug 18 2025
Web:
- mn: fix to Order Time popups incorrect column Id for articles
- mn: fix to Company Stats (ScoreCard) overnight routine
Aug 14 2025
Web:
- mn: fix to delivery counts not updating correctly
- mn: fix to inhome deliveries appearing on tasklist
- mn: fix to rendered service items not packing and shipping automatically
Jul 22 2025
Web:
- mn: added auto select Adjuster check box when adding an insurance company to order without an insurance company
- mn: updated carrier export add more fields: altname, altnaic, maildomain, note, coverage, naic group
Jul 18 2025
Web:
- mn: fix to incorrect NAIC Group numbers on carrier records (from import)
- mn: update to carrier info popup, added inactive, type and fix to missing note
- mn: update to data map added carrier filters: state, onorder, active and type
Jul 17 2025
Web:
- mn: fix to customer final delivery status updating to NA from crm customer popup
- mn: fix to typo on order packout document and added final delivery status to document
- mn: added carrier group name to carrier info popup title
- mn: added next pack due date to mpoperations page, sort by due date
- mn: update inactive flag for carriers with note "not worth tracking" and "do not track"
Jul 16 2025
Web:
- mn: added bulk split button to MP Operations page
- mn: added Member County Coverage export to Oversight-Zip codes
- mn: removed Zip code Export from public use (generates too large of a file)
- mn: fix to mp operations auto split not working
Jul 9 2025
Web:
- mn: fix to filtering error message on mpOperations page
- mn: added conveyor status filter to mpOperations item popup
- mn: updated mpOperation page counts to be clickable
- mn: fix to conveyor rows allowing totalloss items and estimate items
- mn: added group and room filter to mpOperations package popup
Jul 8 2025
Web:
- mn: added group and room filter to mp operations item popup
- mn: fix to mp operations page not saving checkbox settings
Jul 7 2025
Web:
- mn: added auto conveyor removal for 3 or less items
- mn: added new Contact Type "Facility Manager"
- mn: fix to docPreviewPop not being accessible from all pages
- mn: added Notes and Coverage fields to Carrier Merge Popup
Jul 4 2025
Web:
- mn: added hangable filter to order items list page
- mn: updated item filtering to use class OrderItemFilter
- mn: fix to carrier merge popup not sending naic values correctly
Jul 2 2025
Web:
- mn: added unpacked column to Metal Progetti Operations page
- mn: added metal reference code popup
- mn: fix to metal sending records for packed items
- mn: added "Show only on Conveyor" rows to MP Operations page
- mn: added search criteria for MP Operations page
Jun 27 2025
Web:
- mn: fix to slow Metal Progetti query
Jun 24 2025
Web:
- mn: fix to Metal Progetti 'A' Status (remove from conveyor) setting records as packed
- mn: fix to MPOpeartion - sent to Metal column not showing correct value
- mn: added assembly arm control to Order Delivery records
Jun 17 2025
Web:
- mn: fix to department contianer list page not showing all locations for order
- mn: updated department container filtering structure
Jun 17 2025
Web:
- mn: fix to order list state filter using old order address column
- mn: added mail domain filter to carrier list page
- mn: created script to assign carrier to companies using contact mail and carrier mail domain
Jun 16 2025
App:
- tr: working on fixes for camera on certain android devices
Jun 13 2025
Web:
- mn: added SVG coverage map to carriers (popup and detail page)
- mn: fix to carrier state abbr. mixing with state row
- mn: imported carrier domain names
Jun 12 2025
Web:
- mn: changed excel library from jxl to apache
Jun 10 2025
Web:
- mn: fix to calendar event requiring user value
- mn: updated carrier recrods with naic and alt names
- mn: linked carrier records to naic groups
Jun 09 2025
Web:
- mn: fix/update to calendar overlap warning
- mn: fix to load wizard uncombined groups causing error
- mn: added alt name and alt naic numbers fields to carrier merge popup
- mn: fix to storage only group showing pack due date on order delivery list page
- mn: fix to describe and price item not showing price for unauthorized users
Jun 06 2025
Web:
- mn: fix to document preview setting incorrect pageName and causing authorization errors
- mn: fix to "Formerly" section on Contact Detail Popup pointing to current contact
Jun 05 2025
Web:
- mn: improved site list on index page, added user name
- mn: updated create site script (sp_create_site) to include instructions, brands and default groups
Jun 04 2025
Web:
- mn: added alt name field and alt naic field to carrier records
- mn: added OnOrder flag to carrier records, created overnight routine to update flag
- mn: linked customer tpa records to carrier tpa records
- mn: added Accelerator and Last Log Type to Terra export
Jun 03 2025
Web:
- mn: updated zdelivery to pass new parameters to wizload
- mn: hot patch fix to duplicate delivery calendar records
- mn: fix to order detail error when removing company from order
Jun 02 2025
Web:
- mn: fix to task list change due date not reflecting "locked" for load children
- mn: increased column size for tuser.orderQuickFilterSettings to varchar(500)
- mn: fix to Load Wizard showing Total Loss groups as combine options
- mn: fix to Carrier Merge not listing NAIC groups correctly
- mn: fix to missing container type on Department Container labels
- mn: added Location filter to Department Containers
- mn: fix to data truncation error in stored procedure select_contacts_for_terra
May 21 2025
Web:
- mn: updated calendar icons to include text
- mn: updated calendar map to show firm events only
- mn: added tentative, done and firm filters to calendar map filter
- mn: updated map to hide layers box
- mn: removed greying out of routes on map when event is done
App:
- tr: Fixed tag printing from container edit page
- tr: Looking into issues reported by Jim regarding slow delivery scanning
- tr: Looking into issues with item intake saying order was still on hold even after taking hold off
May 20 2025
Web:
- mn: imported "State Plan","Vendors" and "NAIC Groups" to carriers
- mn: added "Unknown" and "Not Provided" columns to oversight export
- mn: fix to irregular referred count on oversight export
- mn: added auto fill sales rep field when selecting company for add contact popup
- mn: removed order progress bars from detail page when not used
May 16 2025
Web:
- mn: changed carrier list page to show all carriers instead of paging
- mn: fix to "exteranl" typo on order detail page
- mn: added inactive company detail to carrier connections on carrier detail page
- mn: update to department containers label
- mn: fix to crmlog not appending "sent to:" when notifying users
May 15 2025
Web:
- mn: added carrier NAIC info to carrier popup
- mn: updated carrier group pop to show current members
May 14 2025
Web:
- mn: added carrier bulk pages
- mn: created script to update carriers with new naic/address data
May 13 2025
Web:
- mn: fix to order address dyna column error
- mn: added naic filter to carrier list
- mn: imported naic numbers from asana#1210214394169832
- mn: added NAIC 2024 reference pdf link
- mn: started bulk carrier pages
- mn: unable to extract all applicable groups from naic reference using ai
App:
- tr: Continuining work on queueing uploads for delivery scanning. Speed improvements, helpful error messages and easier ways to fix errors
- tr: Fixing bug with adding groups in offline mode
- tr: Looking into issue with inhome confirmation message timing with print suggestion (Harri bug report)
May 12 2025
Web:
- mn: added NAIC number, NAIC Group, Type to carrier merge popup
- mn: fixed errors with carrier changes
- mn: added carrier export to carrier list page
App:
- tr: Reworking delivery scanning to queue uploads in the background as you work
- tr: deploying app to testflight and app store
May 9 2025
Web:
- mn: fix to button styles on some popups
- mn: added CarrierGroup table and popup, updated carrier list page, carrier detail page, updated carrier filtering, and carrier reports
- mn: fix to scrolling issue on oversight links
May 8 2025
Web:
- mn: fix to javascript errors on pickcuscon popup
- mn: reworked carrier record to hold XCarrierType enum value, removed tpa and insurance company fields
- mn: restyle to input boxes and labels
App:
- tr: Changed tag printing of containers and tags over to rendered image rather than html/pdf approach that stopped working in maui
- tr: Fixed app crashing when entering delivery start page with map a second time
- tr: Added offline support for delivering all forms of deliverable records
May 7 2025
Web:
- mn: added naic number field to carriers
- mn: created table for carrier group records
- jc: fix to js error on package barcode ship from whoison client log
- jc: fix to js error on package barcode pack from whoison client log
App:
- tr: Fixed bug causing scope/pickup conversion to crash
- tr: Testing changing tag printing from pdfs to images to reduce complexity and hopefully fix multiple tag printing problems
- tr: More null handling improvements in network calls
May 6 2025
Web:
- mn: added filters to gcarrierlist
- mn: added carrier merge popup and sp_ merge procedure
App:
- tr: Fixes for crash when changing flash mode on devices without flash (like ipads)
- tr: Fixed issue causing new deliveries to crash
May 5 2025
App:
- tr: enhanced network calls to retry and better crash handling
- tr: fixed signature capturing
- tr: fixed crash when taking photos
- tr: fixed bug causing crash after network error when updating a Group
May 1 2025
Web:
- jc: fix script error on crm detail popup when coming from calendar event, trying to add contact (whoison client log)
- jc: fix script error when code popup (quality,severity,handling) comes up on order bag page
- mn: fix to table full error for terra contact export (stored procedure)
- mn: fix to delivery wizard suggesting shipped deliveries for combining
- mn: fix to contact filter not filtering for contact name or company name
- mn: optimized slow order storage query
- mn: copied all carrier records (gCarrier) with orders into site 1's company table (tCustomer)
April 30 2025
App:
- tr: Fixed issue with downloading orders connected to hundreds of deliveries
April 25 2025
App:
- tr: Fixed calendar events not letting you click the last one in list
- tr: Changed HttpClient implementation to hopefully fix some random null responses we've been getting
- tr: Improvements to crash reporting
April 24 2025
Web:
- mn: Added social media to User/Customer/Member pages and preferences
- mn: Included Company/User social media in Terra Sender Export
- mn: Updated v-card to show all social media links
- mn: Updated all info popups to include social media links where applicable
April 23 2025
Web:
- mn: Added table for social media accounts for users, members, companies, customers and contacts
- mn: Added ability to add multiple social media accounts for members and contacts
- mn: Created global Add Social Media account popup
- mn: Added Social Media Icons
April 22 2025
App:
- tr: Updating mac/xcode/rider/maui to support maui9
- tr: Testing fixes made for android on ios to ensure no regressions
- tr: Improved data logging on certain network crashes
- tr: Looking into issues with inhome count being wrong on calendar events
- tr: Looking into ways to improve tag printing reliability
Web:
- mn: Created a "Sender" export for Terra; added to overnight routine
- mn: Created a user export table to flag users with changes or companies with changes
- mn: Fixes to combining groups rules
April 17 2025
App:
- tr: Lots of work on getting Android app up to par in maui
- tr: Fixing radio buttons that stopped working in maui
- tr: Fixed icon and splash screen
- tr: Upgraded maui and packages to .net9 to get latest bug fixes and improvements from microsoft
- tr: Fixed list items that were unclickable in Android (many places in app)
- tr: Fixed height of Contents box on Packout page to fit all items
Web:
- mn: Overhaul to contact filtering, created class to hold all filter values
- mn: Added marketing dyna column and filters to contact pages
- mn: Created a generic BooleanFilter for sql tinyint(1)
- mn: Added contact duplicate check to add contact popup
April 16 2025
- Initial changelog created
App:
- tr: Fixed crash on delivery scanning page (Asana: 1209998072547483)
- tr: Fixed item text getting cut off when searching for items on packout (Asana: 1206389324558019)
- tr: Fixed crash when marking certain event types done
- tr: Investigating issues reported in Asana: 1206389324558014, edited delivery group not found
- tr: Investigating Asana: 1206389324558011, trying to find where 1531 in home items value came from
- tr: Fixed error message disappearing too quickly on marking event done (Asana: 1206389324558046) and fixed server side code causing that error
- tr: Removed text from Last Entered section if you're working on a different order (Asana: 1206389324558017)
Web:
- mn: Fixed incorrect order count on Oversight Members page
- mn: Changed add contact popup to warn if email is missing instead of stop user
- mn: Overhaul to contact bulk pages
- mn: Contacts will now be flagged for Terra Export when added to an Order
- mn: Removed contacts from marketing with duplicate email addresses, database update
- tr: Added link on whats new to open change log in a separate tab
- tr: Added scheduled task on server to pull change log down from ir server
- tr: Added cron job on ir server to pull this file out of source control periodically and place it where the TS server can get it