import React from 'react'; import { Intent, Menu, MenuItem, MenuDivider, Tag, ProgressBar, } from '@blueprintjs/core'; import intl from 'react-intl-universal'; import { FormatDateCell, FormattedMessage as T, Icon, If, Choose, Money, Can, } from 'components'; import { formattedAmount, safeCallback, isBlank, calculateStatus } from 'utils'; import { BillAction, PaymentMadeAction, AbilitySubject, } from '../../../../common/abilityOption'; /** * Actions menu. */ export function ActionsMenu({ payload: { onEdit, onOpen, onDelete, onQuick, onViewDetails, onAllocateLandedCost, }, row: { original }, }) { return ( } text={intl.get('view_details')} onClick={safeCallback(onViewDetails, original)} /> } text={intl.get('edit_bill')} onClick={safeCallback(onEdit, original)} /> } text={intl.get('mark_as_open')} onClick={safeCallback(onOpen, original)} /> } text={intl.get('add_payment')} onClick={safeCallback(onQuick, original)} /> } text={intl.get('allocate_landed_coast')} onClick={safeCallback(onAllocateLandedCost, original)} /> } /> ); } /** * Amount accessor. */ export function AmountAccessor(bill) { return !isBlank(bill.amount) ? ( ) : ( '' ); } /** * Status accessor. */ export function StatusAccessor(bill) { return (
{intl.get('overdue_by', { overdue: bill.overdue_days })} {intl.get('due_in', { due: bill.remaining_days })} {intl.get('day_partially_paid', { due: formattedAmount(bill.due_amount, bill.currency_code), })}
); } /** * Retrieve bills table columns. */ export function useBillsTableColumns() { return React.useMemo( () => [ { id: 'bill_date', Header: intl.get('bill_date'), accessor: 'bill_date', Cell: FormatDateCell, width: 110, className: 'bill_date', clickable: true, }, { id: 'vendor', Header: intl.get('vendor_name'), accessor: 'vendor.display_name', width: 180, className: 'vendor', clickable: true, }, { id: 'bill_number', Header: intl.get('bill_number'), accessor: (row) => (row.bill_number ? `${row.bill_number}` : null), width: 100, className: 'bill_number', clickable: true, }, { id: 'amount', Header: intl.get('amount'), accessor: AmountAccessor, width: 120, className: 'amount', align: 'right', clickable: true, }, { id: 'status', Header: intl.get('status'), accessor: StatusAccessor, width: 160, className: 'status', clickable: true, }, { id: 'due_date', Header: intl.get('due_date'), accessor: 'due_date', Cell: FormatDateCell, width: 110, className: 'due_date', clickable: true, }, { id: 'reference_no', Header: intl.get('reference_no'), accessor: 'reference_no', width: 90, className: 'reference_no', clickable: true, }, ], [], ); }