import InvoiceIcon from '../../components/Icons/InvoiceIcon' 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 Invoice = { name: 'invoice', label: 'Invoice', prefix: 'INV', icon: InvoiceIcon, actions: [ { name: 'info', label: 'Info', default: true, row: true, icon: InfoCircleIcon, url: (_id) => `/dashboard/finance/invoices/info?invoiceId=${_id}` }, { name: 'edit', label: 'Edit', type: 'button', icon: EditIcon, url: (_id) => `/dashboard/finance/invoices/info?invoiceId=${_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/invoices/info?invoiceId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', label: 'Finish Edit', type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/finance/invoices/info?invoiceId=${_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/invoices/info?invoiceId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, disabled: (objectData) => { return objectData?.state?.type != 'draft' } }, { type: 'divider' }, { name: 'send', label: 'Send', type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/finance/invoices/info?invoiceId=${_id}&action=send`, visible: (objectData) => { return objectData?.state?.type == 'draft' } }, { name: 'markPaid', label: 'Mark Paid', type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/finance/invoices/info?invoiceId=${_id}&action=markPaid`, visible: (objectData) => { return ( objectData?.state?.type == 'sent' || objectData?.state?.type == 'partiallyPaid' ) } }, { name: 'cancel', label: 'Cancel', type: 'button', icon: XMarkIcon, danger: true, url: (_id) => `/dashboard/finance/invoices/info?invoiceId=${_id}&action=cancel`, disabled: (objectData) => { return ( objectData?.state?.type == 'cancelled' || objectData?.state?.type == 'paid' ) }, visible: (objectData) => { return ( objectData?.state?.type == 'draft' || objectData?.state?.type == 'sent' ) } } ], group: ['vendor', 'customer', 'invoiceType'], filters: ['vendor', 'customer', 'invoiceType'], sorters: ['createdAt', 'state', 'updatedAt', 'invoiceDate', 'dueDate'], columns: [ '_id', '_reference', 'state', 'invoiceType', 'vendor', 'customer', 'invoiceDate', 'dueDate', 'totalAmount', 'totalAmountWithTax', 'totalTaxAmount', 'shippingAmount', 'shippingAmountWithTax', 'grandTotalAmount', 'createdAt', 'updatedAt' ], properties: [ { name: '_id', label: 'ID', type: 'id', columnFixed: 'left', objectType: 'invoice', columnWidth: 140, showCopy: true }, { name: 'createdAt', label: 'Created At', type: 'dateTime', readOnly: true }, { name: '_reference', label: 'Reference', type: 'reference', required: true, objectType: 'invoice', showCopy: true, readOnly: true }, { name: 'updatedAt', label: 'Updated At', type: 'dateTime', readOnly: true }, { name: 'state', label: 'State', type: 'state', readOnly: true }, { name: 'invoiceDate', label: 'Invoice Date', type: 'date', readOnly: false }, { name: 'dueDate', label: 'Due Date', type: 'date', readOnly: false }, { name: 'orderType', label: 'Order Type', type: 'objectType', masterFilter: ['purchaseOrder', 'salesOrder'], required: true }, { name: 'order', label: 'Order', type: 'object', objectType: (objectData) => { return objectData?.orderType }, required: true, showHyperlink: true }, { name: 'vendor', label: 'Vendor', required: true, type: 'object', objectType: 'vendor', showHyperlink: true, readOnly: true, value: (objectData) => { if (objectData?.orderType == 'purchaseOrder') { return objectData?.order?.vendor } else { return objectData?.vendor } } }, { name: 'sentAt', label: 'Sent At', type: 'dateTime', readOnly: true }, { name: 'paidAt', label: 'Paid At', type: 'dateTime', readOnly: true }, { name: 'cancelledAt', label: 'Cancelled At', type: 'dateTime', readOnly: true }, { name: 'overdueAt', label: 'Overdue At', type: 'dateTime', readOnly: true }, { name: 'totalTaxAmount', label: 'Total Tax Amount', type: 'number', prefix: '£', roundNumber: 2, readOnly: true, columnWidth: 175 }, { name: 'totalAmountWithTax', label: 'Total Amount w/ Tax', type: 'number', prefix: '£', readOnly: true, columnWidth: 175, roundNumber: 2 }, { name: 'shippingAmount', label: 'Shipping Amount', type: 'number', prefix: '£', roundNumber: 2, readOnly: true, columnWidth: 150 }, { name: 'shippingAmountWithTax', label: 'Shipping Amount w/ Tax', type: 'number', prefix: '£', readOnly: true, roundNumber: 2, columnWidth: 200 }, { name: 'totalAmount', label: 'Total Amount', type: 'number', prefix: '£', roundNumber: 2, readOnly: true, columnWidth: 150 }, { name: 'grandTotalAmount', label: 'Grand Total Amount', type: 'number', prefix: '£', roundNumber: 2, columnWidth: 175, readOnly: true } ], stats: [ { name: 'draft.count', label: 'Draft', type: 'number', color: 'default' }, { name: 'sent.count', label: 'Sent', type: 'number', color: 'cyan' }, { name: 'partiallyPaid.count', label: 'Partially Paid', type: 'number', color: 'processing' }, { name: 'paid.count', label: 'Paid', type: 'number', color: 'success' }, { name: 'overdue.count', label: 'Overdue', type: 'number', color: 'error' }, { name: 'cancelled.count', label: 'Cancelled', type: 'number', color: 'default' } ] }