// src/commands/woHistory.js import { collectWoHistory } from '../services/woService.js'; import { logger } from '../utils/logger.js'; export async function handleWoHistory(bot, trigger) { logger('wo:history', 'Handler entered'); // Support both Webex (args) and HTTP (query) const query = trigger.query || {}; const args = trigger.args || []; let storeNum = args[0]?.trim() || query.storeNum || query.store || query.s; const modeArg = args[1]?.toLowerCase() || query.mode || ''; const isDetailed = modeArg === 'detailed' || query.detailed === 'true'; if (!storeNum || !/^\d{2,4}$/.test(storeNum)) { const usage = '**Work Order History Usage:**\n' + '`/woHistory 782` → Summary (last 15)\n' + '`/woHistory 782 detailed` → Full list\n\n' + 'Also works via HTTP: `?storeNum=782&mode=detailed`'; await bot.say('markdown', usage); return; } logger('wo:history', `Request for store ${storeNum} (${isDetailed ? 'detailed' : 'summary'} mode)`); try { const data = await collectWoHistory(storeNum); let reply = `**Work Order History – Store ${storeNum}** (Audio Visual Trade, past 3 years)\n\n`; if (data.workOrders.length === 0) { reply += 'No Audio Visual work orders found in the past 3 years.\n'; } else { // Show all in detailed mode, limit to 15 in summary const displayWOs = isDetailed ? data.workOrders : data.workOrders.slice(0, 15); let grandTotal = 0; displayWOs.forEach(wo => { reply += `**${wo.woNumber}** - ${wo.summary}\n`; reply += `Status: ${wo.status} • Opened: ${wo.openedDate} • Total Cost: $${wo.totalInvoiceCost.toLocaleString()}\n\n`; grandTotal += wo.totalInvoiceCost; }); reply += `**Grand Total (AV Trade):** $${grandTotal.toLocaleString()}\n`; if (!isDetailed && data.workOrders.length > 15) { reply += `\nShowing first 15 of ${data.workOrders.length} work orders. Use \`/woHistory ${storeNum} detailed\` for full list.\n`; } } reply += `\n*Last checked: ${new Date().toLocaleTimeString()}*`; await bot.say('markdown', reply.trim() || 'No data available.'); logger('wo:history', `Successfully returned ${data.workOrders.length} work orders for store ${storeNum}`); } catch (err) { logger('wo:history', `Error processing woHistory for store ${storeNum}: ${err.message}`, 'error'); await bot.say('markdown', `❌ Error collecting work order history: ${err.message}`); } }