import PaymentIcon from '../../components/Icons/PaymentIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import CheckIcon from '../../components/Icons/CheckIcon' import EditIcon from '../../components/Icons/EditIcon' import XMarkIcon from '../../components/Icons/XMarkIcon' import BinIcon from '../../components/Icons/BinIcon' export const Payment = { name: 'payment', label: 'Payment', prefix: 'PAY', icon: PaymentIcon, actions: [ { name: 'info', label: 'Info', default: true, row: true, icon: InfoCircleIcon, url: (_id) => `/dashboard/finance/payments/info?paymentId=${_id}` }, { name: 'edit', label: 'Edit', type: 'button', icon: EditIcon, url: (_id) => `/dashboard/finance/payments/info?paymentId=${_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/finance/payments/info?paymentId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', label: 'Finish Edit', type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/finance/payments/info?paymentId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'delete', label: 'Delete', type: 'button', icon: BinIcon, danger: true, url: (_id) => `/dashboard/finance/payments/info?paymentId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, disabled: (objectData) => { return objectData?.state?.type != 'draft' } }, { type: 'divider' }, { name: 'post', label: 'Post', type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/finance/payments/info?paymentId=${_id}&action=post`, visible: (objectData) => { return objectData?.state?.type == 'draft' } }, { name: 'cancel', label: 'Cancel', type: 'button', icon: XMarkIcon, danger: true, url: (_id) => `/dashboard/finance/payments/info?paymentId=${_id}&action=cancel`, disabled: (objectData) => { return objectData?.state?.type == 'cancelled' }, visible: (objectData) => { return ( objectData?.state?.type == 'draft' || objectData?.state?.type == 'posted' ) } } ], group: ['vendor', 'client', 'invoice'], filters: ['vendor', 'client', 'invoice'], sorters: ['createdAt', 'state', 'updatedAt', 'paymentDate'], columns: [ '_reference', 'state', 'invoice', 'vendor', 'client', 'paymentDate', 'amount', 'paymentMethod', 'createdAt', 'updatedAt' ], properties: [ { name: '_id', label: 'ID', type: 'id', columnFixed: 'left', objectType: 'payment', columnWidth: 140, showCopy: true }, { name: 'createdAt', label: 'Created At', type: 'dateTime', readOnly: true }, { name: '_reference', label: 'Reference', type: 'reference', columnFixed: 'left', required: true, objectType: 'payment', showCopy: true, readOnly: true }, { name: 'updatedAt', label: 'Updated At', type: 'dateTime', readOnly: true }, { name: 'state', label: 'State', type: 'state', readOnly: true }, { name: 'invoice', label: 'Invoice', type: 'object', objectType: 'invoice', required: true, showHyperlink: true }, { name: 'payTo', label: 'Pay To', type: 'object', objectType: 'vendor', showHyperlink: true, required: true, readOnly: true, disabled: (objectData) => { return objectData?.invoice?.orderType == 'purchaseOrder' }, value: (objectData) => { return objectData?.invoice?.from } }, { name: 'paymentDate', label: 'Payment Date', type: 'dateTime', required: true }, { name: 'postedAt', label: 'Posted At', type: 'dateTime', readOnly: true }, { name: 'cancelledAt', label: 'Cancelled At', type: 'dateTime', readOnly: true }, { name: 'amount', label: 'Amount', type: 'number', prefix: '£', roundNumber: 2, required: true, columnWidth: 150 }, { name: 'paymentMethod', label: 'Payment Method', type: 'string', required: false }, { name: 'notes', label: 'Notes', type: 'text', required: false } ], stats: [ { name: 'draft.draftCount.count', label: 'Draft', type: 'number', color: 'default' }, { name: 'draft.draftAmount.sum', label: 'Draft Amount', type: 'number', prefix: '£', roundNumber: 2, color: 'default' }, { name: 'posted.postedCount.count', label: 'Posted', type: 'number', color: 'cyan' }, { name: 'posted.postedAmount.sum', label: 'Posted Amount', type: 'number', prefix: '£', roundNumber: 2, color: 'cyan' } ] }