import OrderItemIcon from '../../components/Icons/OrderItemIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' export const OrderItem = { name: 'orderItem', label: 'Order Item', prefix: 'ODI', icon: OrderItemIcon, actions: [ { name: 'info', label: 'Info', default: true, row: true, icon: InfoCircleIcon, url: (_id) => `/dashboard/inventory/orderitems/info?orderItemId=${_id}` } ], group: [], filters: ['itemType', 'item', 'order'], sorters: ['createdAt', 'updatedAt', 'itemAmount', 'quantity'], columns: [ '_id', 'itemType', 'item', 'itemAmount', 'quantity', 'totalAmount', 'taxRate', 'totalAmountWithTax', 'order', 'createdAt', 'updatedAt' ], properties: [ { name: '_id', label: 'ID', type: 'id', columnFixed: 'left', objectType: 'orderItem', columnWidth: 140, showCopy: true }, { name: 'createdAt', label: 'Created At', type: 'dateTime', readOnly: true }, { name: '_reference', label: 'Reference', type: 'reference', objectType: 'orderItem', showCopy: true, readOnly: true }, { name: 'updatedAt', label: 'Updated At', type: 'dateTime', readOnly: true }, { name: 'state', label: 'State', type: 'state', readOnly: true }, { name: 'orderType', label: 'Order Type', type: 'objectType', masterFilter: ['purchaseOrder', 'salesOrder'], required: true }, { name: 'order', label: 'Order', type: 'object', showHyperlink: true, objectType: (objectData) => { return objectData?.orderType }, required: true }, { name: 'itemType', label: 'Item Type', type: 'objectType', masterFilter: ['part', 'packaging'], required: true, columnWidth: 125 }, { name: 'item', label: 'Item', type: 'object', objectType: (objectData) => { return objectData?.itemType }, required: true, showHyperlink: true, columnWidth: 300 }, { name: 'syncAmount', label: 'Sync Amount', type: 'select', options: [ { label: 'Item Cost', value: 'itemCost' }, { label: 'Item Price', value: 'itemPrice' }, { label: 'None', value: null } ], required: false }, { name: 'itemAmount', label: 'Item Amount', type: 'number', required: true, prefix: '£', min: 0, step: 0.01, readOnly: (objectData) => { return objectData?.syncAmount != null }, columnWidth: 150, value: (objectData) => { if (objectData?.item?.cost && objectData?.syncAmount == 'itemCost') { return objectData?.item?.cost || undefined } if (objectData?.item?.price && objectData?.syncAmount == 'itemPrice') { return objectData?.item?.price || undefined } return objectData?.itemAmount || undefined } }, { name: 'quantity', label: 'Quantity', type: 'number', required: true, columnWidth: 150 }, { name: 'totalAmount', label: 'Total Amount', type: 'number', required: true, prefix: '£', min: 0, step: 0.01, columnWidth: 150, readOnly: true, value: (objectData) => { if (objectData?.itemAmount && objectData?.quantity) { return ( (objectData?.itemAmount || 0) * (objectData?.quantity || 0) ).toFixed(2) } else { return 0 } } }, { name: 'taxRate', label: 'Tax Rate', type: 'object', objectType: 'taxRate', showHyperlink: true, value: (objectData) => { if ( objectData?.item?.costTaxRate?._id && objectData?.syncAmount == 'itemCost' ) { return objectData?.item?.costTaxRate || undefined } else if ( objectData?.item?.priceTaxRate?._id && objectData?.syncAmount == 'itemPrice' ) { return objectData?.item?.priceTaxRate || undefined } else { return objectData?.taxRate || undefined } }, readOnly: (objectData) => { return objectData?.syncAmount != null } }, { name: 'totalAmountWithTax', label: 'Total Amount w/ Tax', type: 'number', required: true, readOnly: true, prefix: '£', min: 0, step: 0.01, columnWidth: 175, value: (objectData) => { const totalAmount = objectData?.itemAmount * objectData?.quantity || 0 if (objectData?.taxRate?.rateType == 'percentage') { if (objectData?.quantity == undefined || objectData?.quantity == 0) { return undefined } return ( ( (totalAmount || 0) * (1 + objectData?.taxRate?.rate / 100) ).toFixed(2) || undefined ) } else if (objectData?.taxRate?.rateType == 'amount') { return ( ((totalAmount || 0) + objectData?.taxRate?.rate).toFixed(2) || undefined ) } else { return totalAmount || 0 } } } ] }