v0.1.4 Release

Cancel Picking, Picklist Picker Mode & Bulk Actions

Cancel in-progress picking with inventory restoration and putaway tasks, pick orders from Order-by-Order picklists via Picker Mode, bulk picklist actions, and multiple bug fixes.

This release introduces the ability to cancel in-progress picks with proper inventory handling, enables Picker Mode for Order-by-Order picklists, and adds bulk actions to the picklists page.

Cancel Picking

  • New "Cancel Picking" button on the pick page when items have been picked but the order is not fully complete
  • Dedicated cancel page showing all picked items with quantities and original locations
  • Picker scans a drop-off location where picked items will be placed
  • On confirmation: picked items are moved to the drop-off location, committed quantity is re-committed, and a putaway task is created to return items to their original locations
  • Order is released back to awaiting_shipment for another picker to pick later
  • SweetAlert2 confirmation before executing cancellation
  • Per-product activity logging for inventory restoration
  • Mobile-optimized layout with compact info button

Order-by-Order Picklists in Picker Mode

  • "Start Picking" button on the picklist open page enters Picker Mode for Order-by-Order picklists
  • Per-order "Start Picking" and "Continue" buttons link directly to scan-bin in Picker Mode
  • After completing an order, the system auto-advances to the next pending order in the same picklist
  • Context-aware return: redirects back to the picklist page or picker dashboard depending on where the user started
  • Picker dashboard now detects active Order-by-Order picklists alongside Picker Mode picklists

Picklist Bulk Actions

  • New bulk action bar appears when picklists are selected on the picklists index page
  • Print Packing Slips: generates combined PDF and opens native print dialog via PrintJS (no page navigation)
  • Cancel Picklists: releases all orders back to the queue (only for picklists where all orders are pending)
  • Packing slip print tracking records who printed and when
  • Removed unsafe bulk delete button to prevent broken order states

Orders Page Filters

  • Added Product Name and UPC fields to the Advanced Filters on the orders page
  • Users can now search orders containing a specific product by name, SKU, or UPC

Activity Log Improvements

  • "Committed Qty Released" activity logs now include OrderNumber with clickable links across all code paths (OrderProcessingService, FulfillmentController, QualityControlController, InventoryDeductionService)
  • Recent Activity dashboard renders HTML links for OrderNumber and Product fields instead of showing escaped HTML
  • Activity log labels no longer truncated (removed 15-character limit on field names)

Fulfillment Webhook Fix

  • Fixed potential double-deduction of on_hand and double-release of committed_qty for partially-picked orders
  • Removed overly aggressive every() check that skipped deduction for fully-picked orders even when QC hadn't run
  • quantity_picked is no longer overwritten by webhook — preserves actual picker data

QC Bypass Fix

  • "Bypass Selected" now packs the picked quantity instead of the ordered quantity
  • Uses quantity_picked when available, falls back to ordered quantity for orders that skipped picking
  • Clearer variable names: $qtyToPack, $alreadyPacked, $qtyToPackNow

Bug Fixes

  • Fixed Cancel Picking inventory math: no longer double-counts picked quantity restoration
  • Fixed packing_slips table insert missing required po_id field
  • Fixed putaways table source_type enum missing picking_cancel value
  • Fixed putaways table source_id foreign key constraint when creating picking cancel putaways