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 // Generate carrier tracking link
let trackingLink = '#'; let trackingLink = '#';
const shipper = shippingData.shipper?.toLowerCase() || ''; const shipper = shippingData.shipper || '';
const trackingNumber = shippingData.trackingNumber; const trackingNumber = shippingData.trackingNumber;
if (trackingNumber) { if (trackingNumber) {
if (shipper.includes('usps')) { // Match exactly with the values from the dropdown
switch(shipper) {
case 'USPS':
trackingLink = `https://tools.usps.com/go/TrackConfirmAction?tLabels=${trackingNumber}`; trackingLink = `https://tools.usps.com/go/TrackConfirmAction?tLabels=${trackingNumber}`;
} else if (shipper.includes('ups')) { break;
case 'UPS':
trackingLink = `https://www.ups.com/track?tracknum=${trackingNumber}`; trackingLink = `https://www.ups.com/track?tracknum=${trackingNumber}`;
} else if (shipper.includes('fedex')) { break;
case 'FedEx':
trackingLink = `https://www.fedex.com/apps/fedextrack/?tracknumbers=${trackingNumber}`; trackingLink = `https://www.fedex.com/apps/fedextrack/?tracknumbers=${trackingNumber}`;
} else if (shipper.includes('dhl')) { break;
case 'DHL':
trackingLink = `https://www.dhl.com/global-en/home/tracking.html?tracking-id=${trackingNumber}`; 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'; } from '@mui/material';
import { useUpdateOrderStatus } from '@hooks/adminHooks'; 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 OrderStatusDialog = ({ open, onClose, order }) => {
const [status, setStatus] = useState(order ? order.status : 'pending'); const [status, setStatus] = useState(order ? order.status : 'pending');
const [shippingData, setShippingData] = useState({ const [shippingData, setShippingData] = useState({
shipper: '', shipper: '',
otherShipper: '',
trackingNumber: '', trackingNumber: '',
shipmentId: '', shipmentId: '',
estimatedDelivery: '', estimatedDelivery: '',
@ -49,12 +61,19 @@ const OrderStatusDialog = ({ open, onClose, order }) => {
return; return;
} }
// Determine the actual shipper value to send
let shipperValue = shippingData.shipper;
if (shipperValue === 'other' && shippingData.otherShipper) {
shipperValue = shippingData.otherShipper;
}
updateOrderStatus.mutate({ updateOrderStatus.mutate({
orderId: order.id, orderId: order.id,
status, status,
...(status === 'shipped' && { ...(status === 'shipped' && {
shippingData: { shippingData: {
...shippingData, ...shippingData,
shipper: shipperValue,
// Add current date as shipped date if not provided // Add current date as shipped date if not provided
shippedDate: new Date().toISOString().split('T')[0] shippedDate: new Date().toISOString().split('T')[0]
}, },
@ -104,17 +123,38 @@ const OrderStatusDialog = ({ open, onClose, order }) => {
</Grid> </Grid>
<Grid item xs={12} md={6}> <Grid item xs={12} md={6}>
<TextField <FormControl fullWidth>
fullWidth <InputLabel id="shipper-select-label">Shipping Carrier</InputLabel>
label="Shipping Carrier" <Select
labelId="shipper-select-label"
name="shipper" name="shipper"
value={shippingData.shipper} value={shippingData.shipper}
label="Shipping Carrier"
onChange={handleShippingDataChange} onChange={handleShippingDataChange}
placeholder="USPS, FedEx, UPS, etc." >
/> {SHIPPING_CARRIERS.map((carrier) => (
<MenuItem key={carrier.value} value={carrier.value}>
{carrier.label}
</MenuItem>
))}
</Select>
</FormControl>
</Grid> </Grid>
{shippingData.shipper === 'other' && (
<Grid item xs={12} md={6}> <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 <TextField
fullWidth fullWidth
required required