Shipper options

This commit is contained in:
2ManyProjects 2025-04-26 23:09:09 -05:00
parent c2a5eea983
commit 82b3f2e1d1
2 changed files with 76 additions and 19 deletions

View file

@ -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;
}
}

View file

@ -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 }) => {
</Grid>
<Grid item xs={12} md={6}>
<TextField
fullWidth
label="Shipping Carrier"
name="shipper"
value={shippingData.shipper}
onChange={handleShippingDataChange}
placeholder="USPS, FedEx, UPS, etc."
/>
<FormControl fullWidth>
<InputLabel id="shipper-select-label">Shipping Carrier</InputLabel>
<Select
labelId="shipper-select-label"
name="shipper"
value={shippingData.shipper}
label="Shipping Carrier"
onChange={handleShippingDataChange}
>
{SHIPPING_CARRIERS.map((carrier) => (
<MenuItem key={carrier.value} value={carrier.value}>
{carrier.label}
</MenuItem>
))}
</Select>
</FormControl>
</Grid>
<Grid item xs={12} md={6}>
{shippingData.shipper === 'other' && (
<Grid item xs={12} md={6}>
<TextField
fullWidth
label="Specify Carrier"
name="otherShipper"
value={shippingData.otherShipper}
onChange={handleShippingDataChange}
placeholder="Enter carrier name"
/>
</Grid>
)}
<Grid item xs={12} md={shippingData.shipper === 'other' ? 12 : 6}>
<TextField
fullWidth
required