From 82b3f2e1d1ac1c6de61518adf7e3a4132c3f006c Mon Sep 17 00:00:00 2001 From: 2ManyProjects Date: Sat, 26 Apr 2025 23:09:09 -0500 Subject: [PATCH] Shipper options --- backend/src/routes/orderAdmin.js | 37 ++++++++---- frontend/src/components/OrderStatusDialog.jsx | 58 ++++++++++++++++--- 2 files changed, 76 insertions(+), 19 deletions(-) diff --git a/backend/src/routes/orderAdmin.js b/backend/src/routes/orderAdmin.js index bbb6a56..458ade6 100644 --- a/backend/src/routes/orderAdmin.js +++ b/backend/src/routes/orderAdmin.js @@ -290,18 +290,35 @@ module.exports = (pool, query, authMiddleware) => { // Generate carrier tracking link let trackingLink = '#'; - const shipper = shippingData.shipper?.toLowerCase() || ''; + const shipper = shippingData.shipper || ''; const trackingNumber = shippingData.trackingNumber; - + if (trackingNumber) { - if (shipper.includes('usps')) { - trackingLink = `https://tools.usps.com/go/TrackConfirmAction?tLabels=${trackingNumber}`; - } else if (shipper.includes('ups')) { - trackingLink = `https://www.ups.com/track?tracknum=${trackingNumber}`; - } else if (shipper.includes('fedex')) { - trackingLink = `https://www.fedex.com/apps/fedextrack/?tracknumbers=${trackingNumber}`; - } else if (shipper.includes('dhl')) { - trackingLink = `https://www.dhl.com/global-en/home/tracking.html?tracking-id=${trackingNumber}`; + // Match exactly with the values from the dropdown + switch(shipper) { + case 'USPS': + trackingLink = `https://tools.usps.com/go/TrackConfirmAction?tLabels=${trackingNumber}`; + break; + case 'UPS': + trackingLink = `https://www.ups.com/track?tracknum=${trackingNumber}`; + break; + case 'FedEx': + trackingLink = `https://www.fedex.com/apps/fedextrack/?tracknumbers=${trackingNumber}`; + break; + case 'DHL': + trackingLink = `https://www.dhl.com/global-en/home/tracking.html?tracking-id=${trackingNumber}`; + break; + case 'Canada Post': + trackingLink = `https://www.canadapost-postescanada.ca/track-reperage/en#/search?searchFor=${trackingNumber}`; + break; + case 'Purolator': + trackingLink = `https://www.purolator.com/en/shipping/track/tracking-number/${trackingNumber}`; + break; + default: + // For "other" or any carrier not in our list + // Just make the tracking number text without a link + trackingLink = '#'; + break; } } diff --git a/frontend/src/components/OrderStatusDialog.jsx b/frontend/src/components/OrderStatusDialog.jsx index b22da7e..e2678e9 100644 --- a/frontend/src/components/OrderStatusDialog.jsx +++ b/frontend/src/components/OrderStatusDialog.jsx @@ -18,10 +18,22 @@ import { } from '@mui/material'; import { useUpdateOrderStatus } from '@hooks/adminHooks'; +// List of supported shipping carriers +const SHIPPING_CARRIERS = [ + { value: 'Canada Post', label: 'Canada Post' }, + { value: 'Purolator', label: 'Purolator' }, + { value: 'USPS', label: 'USPS' }, + { value: 'UPS', label: 'UPS' }, + { value: 'FedEx', label: 'FedEx' }, + { value: 'DHL', label: 'DHL' }, + { value: 'other', label: 'Other (specify)' } +]; + const OrderStatusDialog = ({ open, onClose, order }) => { const [status, setStatus] = useState(order ? order.status : 'pending'); const [shippingData, setShippingData] = useState({ shipper: '', + otherShipper: '', trackingNumber: '', shipmentId: '', estimatedDelivery: '', @@ -49,12 +61,19 @@ const OrderStatusDialog = ({ open, onClose, order }) => { return; } + // Determine the actual shipper value to send + let shipperValue = shippingData.shipper; + if (shipperValue === 'other' && shippingData.otherShipper) { + shipperValue = shippingData.otherShipper; + } + updateOrderStatus.mutate({ orderId: order.id, status, ...(status === 'shipped' && { shippingData: { ...shippingData, + shipper: shipperValue, // Add current date as shipped date if not provided shippedDate: new Date().toISOString().split('T')[0] }, @@ -104,17 +123,38 @@ const OrderStatusDialog = ({ open, onClose, order }) => { - + + Shipping Carrier + + - + {shippingData.shipper === 'other' && ( + + + + )} + +