Shipper options
This commit is contained in:
parent
c2a5eea983
commit
82b3f2e1d1
2 changed files with 76 additions and 19 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue