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
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue