mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 14:50:32 +00:00
feat: add invoice ability.
This commit is contained in:
@@ -16,7 +16,12 @@ import withDialogActions from 'containers/Dialog/withDialogActions';
|
|||||||
import withAlertsActions from 'containers/Alert/withAlertActions';
|
import withAlertsActions from 'containers/Alert/withAlertActions';
|
||||||
import withDrawerActions from 'containers/Drawer/withDrawerActions';
|
import withDrawerActions from 'containers/Drawer/withDrawerActions';
|
||||||
|
|
||||||
import { If, Icon, FormattedMessage as T } from 'components';
|
import { If, Can, Icon, FormattedMessage as T } from 'components';
|
||||||
|
import {
|
||||||
|
Invoice_Abilities,
|
||||||
|
PaymentReceive,
|
||||||
|
AbilitySubject,
|
||||||
|
} from '../../../common/abilityOption';
|
||||||
|
|
||||||
import { compose } from 'utils';
|
import { compose } from 'utils';
|
||||||
|
|
||||||
@@ -78,43 +83,54 @@ function InvoiceDetailActionsBar({
|
|||||||
return (
|
return (
|
||||||
<DashboardActionsBar>
|
<DashboardActionsBar>
|
||||||
<NavbarGroup>
|
<NavbarGroup>
|
||||||
<Button
|
<Can I={Invoice_Abilities.Edit} a={AbilitySubject.Invoice}>
|
||||||
className={Classes.MINIMAL}
|
|
||||||
icon={<Icon icon="pen-18" />}
|
|
||||||
text={<T id={'edit_invoice'} />}
|
|
||||||
onClick={handleEditInvoice}
|
|
||||||
/>
|
|
||||||
<NavbarDivider />
|
|
||||||
<If condition={invoice.is_delivered && !invoice.is_fully_paid}>
|
|
||||||
<Button
|
<Button
|
||||||
className={Classes.MINIMAL}
|
className={Classes.MINIMAL}
|
||||||
icon={<Icon icon="quick-payment-16" iconSize={16} />}
|
icon={<Icon icon="pen-18" />}
|
||||||
text={<T id={'add_payment'} />}
|
text={<T id={'edit_invoice'} />}
|
||||||
onClick={handleQuickPaymentInvoice}
|
onClick={handleEditInvoice}
|
||||||
/>
|
/>
|
||||||
</If>
|
|
||||||
<NavbarDivider />
|
<NavbarDivider />
|
||||||
<Button
|
</Can>
|
||||||
className={Classes.MINIMAL}
|
<Can I={PaymentReceive.Create} a={AbilitySubject.PaymentReceive}>
|
||||||
icon={<Icon icon="print-16" />}
|
<If condition={invoice.is_delivered && !invoice.is_fully_paid}>
|
||||||
text={<T id={'print'} />}
|
<Button
|
||||||
onClick={handlePrintInvoice}
|
className={Classes.MINIMAL}
|
||||||
/>
|
icon={<Icon icon="quick-payment-16" iconSize={16} />}
|
||||||
<Button
|
text={<T id={'add_payment'} />}
|
||||||
className={Classes.MINIMAL}
|
onClick={handleQuickPaymentInvoice}
|
||||||
icon={<Icon icon={'trash-16'} iconSize={16} />}
|
/>
|
||||||
text={<T id={'delete'} />}
|
</If>
|
||||||
intent={Intent.DANGER}
|
<NavbarDivider />
|
||||||
onClick={handleDeleteInvoice}
|
</Can>
|
||||||
/>
|
<Can I={Invoice_Abilities.View} a={AbilitySubject.Invoice}>
|
||||||
<NavbarDivider />
|
<Button
|
||||||
<BadDebtMenuItem
|
className={Classes.MINIMAL}
|
||||||
payload={{
|
icon={<Icon icon="print-16" />}
|
||||||
onBadDebt: handleBadDebtInvoice,
|
text={<T id={'print'} />}
|
||||||
onCancelBadDebt: handleCancelBadDebtInvoice,
|
onClick={handlePrintInvoice}
|
||||||
onNotifyViaSMS: handleNotifyViaSMS,
|
/>
|
||||||
}}
|
</Can>
|
||||||
/>
|
<Can I={Invoice_Abilities.Delete} a={AbilitySubject.Invoice}>
|
||||||
|
<Button
|
||||||
|
className={Classes.MINIMAL}
|
||||||
|
icon={<Icon icon={'trash-16'} iconSize={16} />}
|
||||||
|
text={<T id={'delete'} />}
|
||||||
|
intent={Intent.DANGER}
|
||||||
|
onClick={handleDeleteInvoice}
|
||||||
|
/>
|
||||||
|
<NavbarDivider />
|
||||||
|
</Can>
|
||||||
|
<Can I={Invoice_Abilities.BadDebt} a={AbilitySubject.Invoice}>
|
||||||
|
<BadDebtMenuItem
|
||||||
|
payload={{
|
||||||
|
onBadDebt: handleBadDebtInvoice,
|
||||||
|
onCancelBadDebt: handleCancelBadDebtInvoice,
|
||||||
|
onNotifyViaSMS: handleNotifyViaSMS,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Can>
|
||||||
</NavbarGroup>
|
</NavbarGroup>
|
||||||
</DashboardActionsBar>
|
</DashboardActionsBar>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -18,7 +18,11 @@ import {
|
|||||||
|
|
||||||
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
|
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
|
||||||
|
|
||||||
import { If, DashboardActionViewsList } from 'components';
|
import { Can, If, DashboardActionViewsList } from 'components';
|
||||||
|
import {
|
||||||
|
Invoice_Abilities,
|
||||||
|
AbilitySubject,
|
||||||
|
} from '../../../../common/abilityOption';
|
||||||
|
|
||||||
import { useRefreshInvoices } from 'hooks/query/invoices';
|
import { useRefreshInvoices } from 'hooks/query/invoices';
|
||||||
import { useInvoicesListContext } from './InvoicesListProvider';
|
import { useInvoicesListContext } from './InvoicesListProvider';
|
||||||
@@ -84,12 +88,14 @@ function InvoiceActionsBar({
|
|||||||
onChange={handleTabChange}
|
onChange={handleTabChange}
|
||||||
/>
|
/>
|
||||||
<NavbarDivider />
|
<NavbarDivider />
|
||||||
<Button
|
<Can I={Invoice_Abilities.Create} a={AbilitySubject.Invoice}>
|
||||||
className={Classes.MINIMAL}
|
<Button
|
||||||
icon={<Icon icon={'plus'} />}
|
className={Classes.MINIMAL}
|
||||||
text={<T id={'new_invoice'} />}
|
icon={<Icon icon={'plus'} />}
|
||||||
onClick={handleClickNewInvoice}
|
text={<T id={'new_invoice'} />}
|
||||||
/>
|
onClick={handleClickNewInvoice}
|
||||||
|
/>
|
||||||
|
</Can>
|
||||||
<AdvancedFilterPopover
|
<AdvancedFilterPopover
|
||||||
advancedFilterProps={{
|
advancedFilterProps={{
|
||||||
conditions: invoicesFilterRoles,
|
conditions: invoicesFilterRoles,
|
||||||
|
|||||||
@@ -18,8 +18,14 @@ import {
|
|||||||
Choose,
|
Choose,
|
||||||
If,
|
If,
|
||||||
Icon,
|
Icon,
|
||||||
|
Can,
|
||||||
} from 'components';
|
} from 'components';
|
||||||
import { formattedAmount, safeCallback, calculateStatus } from 'utils';
|
import { formattedAmount, safeCallback, calculateStatus } from 'utils';
|
||||||
|
import {
|
||||||
|
Invoice_Abilities,
|
||||||
|
PaymentReceive,
|
||||||
|
AbilitySubject,
|
||||||
|
} from '../../../../common/abilityOption';
|
||||||
|
|
||||||
export const statusAccessor = (row) => {
|
export const statusAccessor = (row) => {
|
||||||
return (
|
return (
|
||||||
@@ -55,7 +61,6 @@ export const statusAccessor = (row) => {
|
|||||||
})}
|
})}
|
||||||
</span>
|
</span>
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
|
|
||||||
animate={false}
|
animate={false}
|
||||||
stripes={false}
|
stripes={false}
|
||||||
intent={Intent.PRIMARY}
|
intent={Intent.PRIMARY}
|
||||||
@@ -115,37 +120,46 @@ export function ActionsMenu({
|
|||||||
text={intl.get('view_details')}
|
text={intl.get('view_details')}
|
||||||
onClick={safeCallback(onViewDetails, original)}
|
onClick={safeCallback(onViewDetails, original)}
|
||||||
/>
|
/>
|
||||||
<MenuDivider />
|
<Can I={Invoice_Abilities.Edit} a={AbilitySubject.Invoice}>
|
||||||
<MenuItem
|
<MenuDivider />
|
||||||
icon={<Icon icon="pen-18" />}
|
|
||||||
text={intl.get('edit_invoice')}
|
|
||||||
onClick={safeCallback(onEdit, original)}
|
|
||||||
/>
|
|
||||||
<If condition={!original.is_delivered}>
|
|
||||||
<MenuItem
|
<MenuItem
|
||||||
icon={<Icon icon="send" iconSize={16} />}
|
icon={<Icon icon="pen-18" />}
|
||||||
text={intl.get('mark_as_delivered')}
|
text={intl.get('edit_invoice')}
|
||||||
onClick={safeCallback(onDeliver, original)}
|
onClick={safeCallback(onEdit, original)}
|
||||||
/>
|
/>
|
||||||
</If>
|
|
||||||
<If condition={original.is_delivered && !original.is_fully_paid}>
|
<If condition={!original.is_delivered}>
|
||||||
|
<MenuItem
|
||||||
|
icon={<Icon icon="send" iconSize={16} />}
|
||||||
|
text={intl.get('mark_as_delivered')}
|
||||||
|
onClick={safeCallback(onDeliver, original)}
|
||||||
|
/>
|
||||||
|
</If>
|
||||||
|
</Can>
|
||||||
|
<Can I={PaymentReceive.Create} a={AbilitySubject.PaymentReceive}>
|
||||||
|
<If condition={original.is_delivered && !original.is_fully_paid}>
|
||||||
|
<MenuItem
|
||||||
|
icon={<Icon icon="quick-payment-16" iconSize={16} />}
|
||||||
|
text={intl.get('add_payment')}
|
||||||
|
onClick={safeCallback(onQuick, original)}
|
||||||
|
/>
|
||||||
|
</If>
|
||||||
|
</Can>
|
||||||
|
<Can I={Invoice_Abilities.View} a={AbilitySubject.Invoice}>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
icon={<Icon icon="quick-payment-16" iconSize={16} />}
|
icon={<Icon icon={'print-16'} iconSize={16} />}
|
||||||
text={intl.get('add_payment')}
|
text={intl.get('print')}
|
||||||
onClick={safeCallback(onQuick, original)}
|
onClick={safeCallback(onPrint, original)}
|
||||||
/>
|
/>
|
||||||
</If>
|
</Can>
|
||||||
<MenuItem
|
<Can I={Invoice_Abilities.Delete} a={AbilitySubject.Invoice}>
|
||||||
icon={<Icon icon={'print-16'} iconSize={16} />}
|
<MenuItem
|
||||||
text={intl.get('print')}
|
text={intl.get('delete_invoice')}
|
||||||
onClick={safeCallback(onPrint, original)}
|
intent={Intent.DANGER}
|
||||||
/>
|
onClick={safeCallback(onDelete, original)}
|
||||||
<MenuItem
|
icon={<Icon icon="trash-16" iconSize={16} />}
|
||||||
text={intl.get('delete_invoice')}
|
/>
|
||||||
intent={Intent.DANGER}
|
</Can>
|
||||||
onClick={safeCallback(onDelete, original)}
|
|
||||||
icon={<Icon icon="trash-16" iconSize={16} />}
|
|
||||||
/>
|
|
||||||
</Menu>
|
</Menu>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user