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' && (
+
+
+
+ )}
+
+