import ShipmentIcon from '../../components/Icons/ShipmentIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' import BinIcon from '../../components/Icons/BinIcon' import CheckIcon from '../../components/Icons/CheckIcon' import XMarkIcon from '../../components/Icons/XMarkIcon' export const Shipment = { name: 'shipment', label: 'Shipment', prefix: 'SHP', icon: ShipmentIcon, actions: [ { name: 'info', label: 'Info', default: true, row: true, icon: InfoCircleIcon, url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}` }, { name: 'edit', label: 'Edit', type: 'button', icon: EditIcon, url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, disabled: (objectData) => { return objectData?.state?.type != 'draft' } }, { name: 'cancelEdit', label: 'Cancel Edit', type: 'button', icon: XMarkIcon, url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true }, disabled: (objectData) => { return objectData?.state?.type != 'draft' } }, { name: 'finishEdit', label: 'Finish Edit', type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true }, disabled: (objectData) => { return objectData?.state?.type != 'draft' } }, { name: 'delete', label: 'Delete', type: 'button', icon: BinIcon, danger: true, url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, disabled: (objectData) => { return objectData?.state?.type != 'draft' } }, { type: 'divider' }, { name: 'ship', label: 'Ship', type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=ship`, disabled: (objectData) => { return objectData?.state?.type != 'planned' }, visible: (objectData) => { return ( objectData?.state?.type == 'planned' || objectData?.state?.type == 'draft' ) } }, { name: 'receive', label: 'Receive', type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=receive`, disabled: (objectData) => { return objectData?.state?.type != 'shipped' }, visible: (objectData) => { return ( objectData?.state?.type == 'shipped' || objectData?.state?.type == 'delivered' ) } } ], group: [], filters: ['orderType', 'order', 'state', 'courierService'], sorters: [ 'createdAt', 'state', 'updatedAt', 'shippedAt', 'expectedAt', 'deliveredAt' ], columns: [ '_id', '_reference', 'state', 'orderType', 'order', 'amount', 'amountWithTax', 'taxRate', 'taxAmount', 'trackingNumber', 'shippedAt', 'expectedAt', 'deliveredAt', 'updatedAt', 'createdAt' ], properties: [ { name: '_id', label: 'ID', type: 'id', columnFixed: 'left', objectType: 'shipment', columnWidth: 140, showCopy: true }, { name: 'createdAt', label: 'Created At', type: 'dateTime', readOnly: true }, { name: '_reference', label: 'Reference', type: 'reference', objectType: 'shipment', showCopy: true, readOnly: true }, { name: 'updatedAt', label: 'Updated At', type: 'dateTime', readOnly: true }, { name: 'state', label: 'State', type: 'state', readOnly: true }, { name: 'shippedAt', label: 'Shipped At', type: 'dateTime', required: false }, { name: 'orderType', label: 'Order Type', required: true, type: 'objectType', masterFilter: ['purchaseOrder', 'salesOrder'], showHyperlink: true }, { name: 'expectedAt', label: 'Expected At', type: 'dateTime', required: false }, { name: 'order', label: 'Order', required: true, type: 'object', showHyperlink: true, objectType: (objectData) => { return objectData?.orderType } }, { name: 'deliveredAt', label: 'Delivered At', type: 'dateTime', required: false }, { name: 'courierService', label: 'Courier Service', required: true, type: 'object', objectType: 'courierService' }, { name: 'trackingNumber', label: 'Tracking Number', type: 'text', required: false }, { name: 'taxRate', label: 'Tax Rate', type: 'object', objectType: 'taxRate', showHyperlink: true }, { name: 'taxRecord', label: 'Tax Record', type: 'object', objectType: 'taxRecord', showHyperlink: true }, { name: 'amount', label: 'Amount', type: 'number', required: true, prefix: '£', min: 0, step: 0.01, columnWidth: 150 }, { name: 'taxAmount', label: 'Tax Amount', type: 'number', required: true, prefix: '£', fixedNumber: 2, min: 0, step: 0.01, readOnly: true, value: (objectData) => { return (objectData?.amount * objectData?.taxRate?.rate) / 100 || 0 } }, { name: 'amountWithTax', label: 'Amount w/ Tax', type: 'number', required: true, prefix: '£', min: 0, step: 0.01, readOnly: true, columnWidth: 175, value: (objectData) => { if (objectData?._isEditing == true) { return ( (objectData?.amount || 0) + (objectData?.taxAmount || 0) ).toFixed(2) } if ( Number.parseFloat(objectData?.amount) && (objectData.taxRate == undefined || objectData.taxRate == null) ) { return Number.parseFloat(objectData?.amount).toFixed(2) } if (Number.parseFloat(objectData?.amountWithTax)) { return Number.parseFloat(objectData?.amountWithTax).toFixed(2) } return 0 } } ] }