feat: add ability credit & vendor & item transactions.

This commit is contained in:
elforjani13
2021-12-23 17:27:28 +02:00
parent 789c8db693
commit d719ac60bd
26 changed files with 519 additions and 290 deletions

View File

@@ -1,8 +1,51 @@
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import {
AbilitySubject,
SaleEstimateAction,
SaleReceiptAction,
SaleInvoiceAction,
BillAction,
} from '../common/abilityOption';
import { useAbilitiesFilter } from '../hooks';
export default [ export const getItemPaymentTransactions = () => [
{ name: 'invoices', label: intl.get('invoices') }, {
{ name: 'estimates', label: intl.get('estimates') }, name: 'invoices',
{ name: 'receipts', label: intl.get('receipts') }, label: intl.get('invoices'),
{ name: 'bills', label: intl.get('bills') }, permission: {
subject: AbilitySubject.Invoice,
ability: SaleInvoiceAction.View,
},
},
{
name: 'estimates',
label: intl.get('estimates'),
permission: {
subject: AbilitySubject.Estimate,
ability: SaleEstimateAction.View,
},
},
{
name: 'receipts',
label: intl.get('receipts'),
permission: {
subject: AbilitySubject.Receipt,
ability: SaleReceiptAction.View,
},
},
{
name: 'bills',
label: intl.get('bills'),
permission: {
subject: AbilitySubject.Bill,
ability: BillAction.View,
},
},
]; ];
export const useGetItemPaymentTransactionsMenu = () => {
const itemTransactionMenu = getItemPaymentTransactions();
const abilitiesFilter = useAbilitiesFilter();
return abilitiesFilter(itemTransactionMenu);
};

View File

@@ -3,8 +3,11 @@ import { Tab } from '@blueprintjs/core';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import styled from 'styled-components'; import styled from 'styled-components';
import { DrawerMainTabs } from 'components'; import { Can, DrawerMainTabs } from 'components';
import {
PaymentMadeAction,
AbilitySubject,
} from '../../../common/abilityOption';
import BillDetailTab from './BillDetailTab'; import BillDetailTab from './BillDetailTab';
import LocatedLandedCostTable from './LocatedLandedCostTable'; import LocatedLandedCostTable from './LocatedLandedCostTable';
import BillGLEntriesTable from './BillGLEntriesTable'; import BillGLEntriesTable from './BillGLEntriesTable';
@@ -30,12 +33,13 @@ function BillDetailsTabs() {
id={'journal_entries'} id={'journal_entries'}
panel={<BillGLEntriesTable />} panel={<BillGLEntriesTable />}
/> />
{/* <Can I={PaymentMadeAction.View} a={AbilitySubject.PaymentMade}> */}
<Tab <Tab
title={intl.get('payment_transactions')} title={intl.get('payment_transactions')}
id={'payment_transactions'} id={'payment_transactions'}
panel={<BillPaymentTransactionTable />} panel={<BillPaymentTransactionTable />}
/> />
{/* </Can> */}
<Tab <Tab
title={intl.get('located_landed_cost')} title={intl.get('located_landed_cost')}
id={'landed_cost'} id={'landed_cost'}

View File

@@ -3,8 +3,12 @@ import intl from 'react-intl-universal';
import { Intent, Menu, MenuItem } from '@blueprintjs/core'; import { Intent, Menu, MenuItem } from '@blueprintjs/core';
import clsx from 'classnames'; import clsx from 'classnames';
import { CLASSES } from '../../../../common/classes'; import { CLASSES } from '../../../../common/classes';
import { FormatDateCell, Icon } from '../../../../components'; import { Can, FormatDateCell, Icon } from '../../../../components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
PaymentMadeAction,
AbilitySubject,
} from '../../../../common/abilityOption';
/** /**
* Table actions menu. * Table actions menu.
@@ -15,17 +19,21 @@ export function ActionsMenu({
}) { }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={PaymentMadeAction.Edit} a={AbilitySubject.PaymentMade}>
icon={<Icon icon="pen-18" />} <MenuItem
text={intl.get('invoice_transactions.action.edit_transaction')} icon={<Icon icon="pen-18" />}
onClick={safeCallback(onEdit, original)} text={intl.get('invoice_transactions.action.edit_transaction')}
/> onClick={safeCallback(onEdit, original)}
<MenuItem />
text={intl.get('invoice_transactions.action.delete_transaction')} </Can>
intent={Intent.DANGER} <Can I={PaymentMadeAction.Delete} a={AbilitySubject.PaymentMade}>
onClick={safeCallback(onDelete, original)} <MenuItem
icon={<Icon icon="trash-16" iconSize={16} />} text={intl.get('invoice_transactions.action.delete_transaction')}
/> intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -3,7 +3,9 @@ import intl from 'react-intl-universal';
import styled from 'styled-components'; import styled from 'styled-components';
import { Intent, MenuItem, Menu } from '@blueprintjs/core'; import { Intent, MenuItem, Menu } from '@blueprintjs/core';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import { Icon } from 'components'; import { Can, Icon } from 'components';
import { BillAction, AbilitySubject } from '../../../common/abilityOption';
/** /**
* Actions menu. * Actions menu.
*/ */

View File

@@ -3,12 +3,16 @@ import { Tab } from '@blueprintjs/core';
import styled from 'styled-components'; import styled from 'styled-components';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { DrawerMainTabs } from 'components'; import { Can, DrawerMainTabs } from 'components';
import CreditNoteDetailActionsBar from './CreditNoteDetailActionsBar'; import CreditNoteDetailActionsBar from './CreditNoteDetailActionsBar';
import CreditNoteDetailPanel from './CreditNoteDetailPanel'; import CreditNoteDetailPanel from './CreditNoteDetailPanel';
import RefundCreditNoteTransactionsTable from './RefundCreditNoteTransactions/RefundCreditNoteTransactionsTable'; import RefundCreditNoteTransactionsTable from './RefundCreditNoteTransactions/RefundCreditNoteTransactionsTable';
import ReconcileCreditNoteTransactionsTable from './ReconcileCreditNoteTransactions/ReconcileCreditNoteTransactionsTable'; import ReconcileCreditNoteTransactionsTable from './ReconcileCreditNoteTransactions/ReconcileCreditNoteTransactionsTable';
import { CreditNoteGLEntriesTable } from './JournalEntriesTransactions/JournalEntriesTransactionsTable'; import { CreditNoteGLEntriesTable } from './JournalEntriesTransactions/JournalEntriesTransactionsTable';
import {
CreditNoteAction,
AbilitySubject,
} from '../../../common/abilityOption';
/** /**
* Credit Note view detail. * Credit Note view detail.
@@ -40,6 +44,7 @@ function CreditNoteDetailsTabs() {
id={'journal_entries'} id={'journal_entries'}
panel={<CreditNoteGLEntriesTable />} panel={<CreditNoteGLEntriesTable />}
/> />
{/* <Can I={CreditNoteAction.View} a={AbilitySubject.CreditNote}> */}
<Tab <Tab
title={intl.get('credit_note.drawer.label_refund_transactions')} title={intl.get('credit_note.drawer.label_refund_transactions')}
id={'refund_transactions'} id={'refund_transactions'}
@@ -50,6 +55,7 @@ function CreditNoteDetailsTabs() {
id={'reconcile_transactions'} id={'reconcile_transactions'}
panel={<ReconcileCreditNoteTransactionsTable />} panel={<ReconcileCreditNoteTransactionsTable />}
/> />
{/* </Can> */}
</DrawerMainTabs> </DrawerMainTabs>
); );
} }

View File

@@ -14,7 +14,17 @@ 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 { DrawerActionsBar, Icon, FormattedMessage as T, If } from 'components'; import {
DrawerActionsBar,
Can,
Icon,
FormattedMessage as T,
If,
} from 'components';
import {
CreditNoteAction,
AbilitySubject,
} from '../../../common/abilityOption';
import { compose } from 'utils'; import { compose } from 'utils';
import { CreditNoteMenuItem } from './utils'; import { CreditNoteMenuItem } from './utils';
@@ -58,37 +68,45 @@ function CreditNoteDetailActionsBar({
return ( return (
<DrawerActionsBar> <DrawerActionsBar>
<NavbarGroup> <NavbarGroup>
<Button <Can I={CreditNoteAction.Edit} a={AbilitySubject.CreditNote}>
className={Classes.MINIMAL}
icon={<Icon icon="pen-18" />}
text={<T id={'credit_note.action.edit_credit_note'} />}
onClick={handleEditCreditNote}
/>
<NavbarDivider />
<If condition={!creditNote.is_closed && !creditNote.is_draft}>
<Button <Button
className={Classes.MINIMAL} className={Classes.MINIMAL}
icon={<Icon icon="arrow-upward" iconSize={18} />} icon={<Icon icon="pen-18" />}
text={<T id={'refund'} />} text={<T id={'credit_note.action.edit_credit_note'} />}
onClick={handleRefundCreditNote} onClick={handleEditCreditNote}
/> />
<NavbarDivider /> <NavbarDivider />
</If> </Can>
<Button <Can I={CreditNoteAction.Refund} a={AbilitySubject.CreditNote}>
className={Classes.MINIMAL} <If condition={!creditNote.is_closed && !creditNote.is_draft}>
icon={<Icon icon={'trash-16'} iconSize={16} />} <Button
text={<T id={'delete'} />} className={Classes.MINIMAL}
intent={Intent.DANGER} icon={<Icon icon="arrow-upward" iconSize={18} />}
onClick={handleDeleteCreditNote} text={<T id={'refund'} />}
/> onClick={handleRefundCreditNote}
<If condition={creditNote.is_published && !creditNote.is_closed}> />
<NavbarDivider /> <NavbarDivider />
<CreditNoteMenuItem </If>
payload={{ </Can>
onReconcile: handleReconcileCreditNote, <Can I={CreditNoteAction.Delete} a={AbilitySubject.CreditNote}>
}} <Button
className={Classes.MINIMAL}
icon={<Icon icon={'trash-16'} iconSize={16} />}
text={<T id={'delete'} />}
intent={Intent.DANGER}
onClick={handleDeleteCreditNote}
/> />
</If> </Can>
<Can I={CreditNoteAction.Edit} a={AbilitySubject.CreditNote}>
<If condition={creditNote.is_published && !creditNote.is_closed}>
<NavbarDivider />
<CreditNoteMenuItem
payload={{
onReconcile: handleReconcileCreditNote,
}}
/>
</If>
</Can>
</NavbarGroup> </NavbarGroup>
</DrawerActionsBar> </DrawerActionsBar>
); );

View File

@@ -1,8 +1,12 @@
import React from 'react'; import React from 'react';
import { Intent, MenuItem, Menu } from '@blueprintjs/core'; import { Intent, MenuItem, Menu } from '@blueprintjs/core';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { FormatDateCell, Icon } from 'components'; import { Can, FormatDateCell, Icon } from 'components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
CreditNoteAction,
AbilitySubject,
} from '../../../../common/abilityOption';
/** /**
* Actions menu. * Actions menu.
@@ -10,12 +14,14 @@ import { safeCallback } from 'utils';
export function ActionsMenu({ payload: { onDelete }, row: { original } }) { export function ActionsMenu({ payload: { onDelete }, row: { original } }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={CreditNoteAction.Delete} a={AbilitySubject.CreditNote}>
icon={<Icon icon="trash-16" iconSize={16} />} <MenuItem
text={intl.get('delete_transaction')} icon={<Icon icon="trash-16" iconSize={16} />}
intent={Intent.DANGER} text={intl.get('delete_transaction')}
onClick={safeCallback(onDelete, original)} intent={Intent.DANGER}
/> onClick={safeCallback(onDelete, original)}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -1,8 +1,12 @@
import React from 'react'; import React from 'react';
import { Intent, MenuItem, Menu } from '@blueprintjs/core'; import { Intent, MenuItem, Menu } from '@blueprintjs/core';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { FormatDateCell, Icon } from 'components'; import { Can, FormatDateCell, Icon } from 'components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
CreditNoteAction,
AbilitySubject,
} from '../../../../common/abilityOption';
/** /**
* Actions menu. * Actions menu.
@@ -10,12 +14,14 @@ import { safeCallback } from 'utils';
export function ActionsMenu({ payload: { onDelete }, row: { original } }) { export function ActionsMenu({ payload: { onDelete }, row: { original } }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={CreditNoteAction.Delete} a={AbilitySubject.CreditNote}>
icon={<Icon icon="trash-16" iconSize={16} />} <MenuItem
text={intl.get('delete_transaction')} icon={<Icon icon="trash-16" iconSize={16} />}
intent={Intent.DANGER} text={intl.get('delete_transaction')}
onClick={safeCallback(onDelete, original)} intent={Intent.DANGER}
/> onClick={safeCallback(onDelete, original)}
/>
</Can>
</Menu> </Menu>
); );
} }
@@ -39,7 +45,9 @@ export function useRefundCreditTransactionsTableColumns() {
}, },
{ {
id: 'from_account', id: 'from_account',
Header: intl.get('refund_credit_transactions.column.withdrawal_account'), Header: intl.get(
'refund_credit_transactions.column.withdrawal_account',
),
accessor: ({ from_account }) => from_account.name, accessor: ({ from_account }) => from_account.name,
width: 100, width: 100,
className: 'from_account', className: 'from_account',

View File

@@ -1,9 +1,13 @@
import React from 'react'; import React from 'react';
import { Tab } from '@blueprintjs/core'; import { Tab } from '@blueprintjs/core';
import styled from 'styled-components'; import styled from 'styled-components';
import intl from 'react-intl-universal';
import { DrawerMainTabs } from 'components'; import { Can, DrawerMainTabs } from 'components';
import {
PaymentReceiveAction,
AbilitySubject,
} from '../../../common/abilityOption';
import InvoiceDetailActionsBar from './InvoiceDetailActionsBar'; import InvoiceDetailActionsBar from './InvoiceDetailActionsBar';
import InvoiceGLEntriesTable from './InvoiceGLEntriesTable'; import InvoiceGLEntriesTable from './InvoiceGLEntriesTable';
import InvoicePaymentTransactionsTable from './InvoicePaymentTransactions/InvoicePaymentTransactionsTable'; import InvoicePaymentTransactionsTable from './InvoicePaymentTransactions/InvoicePaymentTransactionsTable';
@@ -19,17 +23,23 @@ function InvoiceDetailsTabs() {
renderActiveTabPanelOnly={true} renderActiveTabPanelOnly={true}
defaultSelectedTabId="details" defaultSelectedTabId="details"
> >
<Tab title={'Overview'} id={'details'} panel={<InvoiceDetailTab />} />
<Tab <Tab
title={'Journal Entries'} title={intl.get('overview')}
id={'details'}
panel={<InvoiceDetailTab />}
/>
<Tab
title={intl.get('journal_entries')}
id={'journal_entries'} id={'journal_entries'}
panel={<InvoiceGLEntriesTable />} panel={<InvoiceGLEntriesTable />}
/> />
{/* <Can I={PaymentReceiveAction.View} a={AbilitySubject.PaymentReceive}> */}
<Tab <Tab
title={'Payment Transactions'} title={intl.get('payment_transactions')}
id={'payment_transactions'} id={'payment_transactions'}
panel={<InvoicePaymentTransactionsTable />} panel={<InvoicePaymentTransactionsTable />}
/> />
{/* </Can> */}
</DrawerMainTabs> </DrawerMainTabs>
); );
} }

View File

@@ -3,8 +3,12 @@ import intl from 'react-intl-universal';
import { Intent, Menu, MenuItem } from '@blueprintjs/core'; import { Intent, Menu, MenuItem } from '@blueprintjs/core';
import clsx from 'classnames'; import clsx from 'classnames';
import { CLASSES } from '../../../../common/classes'; import { CLASSES } from '../../../../common/classes';
import { FormatDateCell, Icon } from '../../../../components'; import { FormatDateCell, Icon, Can } from '../../../../components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
PaymentReceiveAction,
AbilitySubject,
} from '../../../../common/abilityOption';
/** /**
* Table actions menu. * Table actions menu.
@@ -15,17 +19,21 @@ export function ActionsMenu({
}) { }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={PaymentReceiveAction.Edit} a={AbilitySubject.PaymentReceive}>
icon={<Icon icon="pen-18" />} <MenuItem
text={intl.get('invoice_transactions.action.edit_transaction')} icon={<Icon icon="pen-18" />}
onClick={safeCallback(onEdit, original)} text={intl.get('invoice_transactions.action.edit_transaction')}
/> onClick={safeCallback(onEdit, original)}
<MenuItem />
text={intl.get('invoice_transactions.action.delete_transaction')} </Can>
intent={Intent.DANGER} <Can I={PaymentReceiveAction.Delete} a={AbilitySubject.PaymentReceive}>
onClick={safeCallback(onDelete, original)} <MenuItem
icon={<Icon icon="trash-16" iconSize={16} />} text={intl.get('invoice_transactions.action.delete_transaction')}
/> intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -4,8 +4,12 @@ import { Intent, Menu, MenuItem } from '@blueprintjs/core';
import clsx from 'classnames'; import clsx from 'classnames';
import { CLASSES } from '../../../../../common/classes'; import { CLASSES } from '../../../../../common/classes';
import { FormatDateCell, Icon } from '../../../../../components'; import { Can, FormatDateCell, Icon } from '../../../../../components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
BillAction,
AbilitySubject,
} from '../../../../../common/abilityOption';
/** /**
* Table actions menu. * Table actions menu.
@@ -16,17 +20,21 @@ export function ActionsMenu({
}) { }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={BillAction.Edit} a={AbilitySubject.Bill}>
icon={<Icon icon="pen-18" />} <MenuItem
text={intl.get('invoice_transactions.action.edit_transaction')} icon={<Icon icon="pen-18" />}
onClick={safeCallback(onEdit, original)} text={intl.get('invoice_transactions.action.edit_transaction')}
/> onClick={safeCallback(onEdit, original)}
<MenuItem />
text={intl.get('invoice_transactions.action.delete_transaction')} </Can>
intent={Intent.DANGER} <Can I={BillAction.Delete} a={AbilitySubject.Bill}>
onClick={safeCallback(onDelete, original)} <MenuItem
icon={<Icon icon="trash-16" iconSize={16} />} text={intl.get('invoice_transactions.action.delete_transaction')}
/> intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -4,8 +4,12 @@ import { Intent, Menu, MenuItem } from '@blueprintjs/core';
import clsx from 'classnames'; import clsx from 'classnames';
import { CLASSES } from '../../../../../common/classes'; import { CLASSES } from '../../../../../common/classes';
import { FormatDateCell, Icon } from '../../../../../components'; import { Can, FormatDateCell, Icon } from '../../../../../components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
SaleEstimateAction,
AbilitySubject,
} from '../../../../../common/abilityOption';
/** /**
* Table actions menu. * Table actions menu.
@@ -16,17 +20,21 @@ export function ActionsMenu({
}) { }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={SaleEstimateAction.Edit} a={AbilitySubject.Estimate}>
icon={<Icon icon="pen-18" />} <MenuItem
text={intl.get('invoice_transactions.action.edit_transaction')} icon={<Icon icon="pen-18" />}
onClick={safeCallback(onEdit, original)} text={intl.get('invoice_transactions.action.edit_transaction')}
/> onClick={safeCallback(onEdit, original)}
<MenuItem />
text={intl.get('invoice_transactions.action.delete_transaction')} </Can>
intent={Intent.DANGER} <Can I={SaleEstimateAction.Delete} a={AbilitySubject.Estimate}>
onClick={safeCallback(onDelete, original)} <MenuItem
icon={<Icon icon="trash-16" iconSize={16} />} text={intl.get('invoice_transactions.action.delete_transaction')}
/> intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -4,9 +4,12 @@ import { Intent, Menu, MenuItem } from '@blueprintjs/core';
import clsx from 'classnames'; import clsx from 'classnames';
import { CLASSES } from '../../../../../common/classes'; import { CLASSES } from '../../../../../common/classes';
import { FormatDateCell ,Icon} from '../../../../../components'; import { Can, FormatDateCell, Icon } from '../../../../../components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
SaleInvoiceAction,
AbilitySubject,
} from '../../../../../common/abilityOption';
/** /**
* Table actions menu. * Table actions menu.
@@ -17,17 +20,21 @@ export function ActionsMenu({
}) { }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={SaleInvoiceAction.Edit} a={AbilitySubject.Invoice}>
icon={<Icon icon="pen-18" />} <MenuItem
text={intl.get('invoice_transactions.action.edit_transaction')} icon={<Icon icon="pen-18" />}
onClick={safeCallback(onEdit, original)} text={intl.get('invoice_transactions.action.edit_transaction')}
/> onClick={safeCallback(onEdit, original)}
<MenuItem />
text={intl.get('invoice_transactions.action.delete_transaction')} </Can>
intent={Intent.DANGER} <Can I={SaleInvoiceAction.Delete} a={AbilitySubject.Invoice}>
onClick={safeCallback(onDelete, original)} <MenuItem
icon={<Icon icon="trash-16" iconSize={16} />} text={intl.get('invoice_transactions.action.delete_transaction')}
/> intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -4,8 +4,12 @@ import { Intent, Menu, MenuItem } from '@blueprintjs/core';
import clsx from 'classnames'; import clsx from 'classnames';
import { CLASSES } from '../../../../../common/classes'; import { CLASSES } from '../../../../../common/classes';
import { FormatDateCell, Icon } from '../../../../../components'; import { Can, FormatDateCell, Icon } from '../../../../../components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
SaleReceiptAction,
AbilitySubject,
} from '../../../../../common/abilityOption';
/** /**
* Table actions menu. * Table actions menu.
@@ -16,17 +20,21 @@ export function ActionsMenu({
}) { }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={SaleReceiptAction.Edit} a={AbilitySubject.Receipt}>
icon={<Icon icon="pen-18" />} <MenuItem
text={intl.get('invoice_transactions.action.edit_transaction')} icon={<Icon icon="pen-18" />}
onClick={safeCallback(onEdit, original)} text={intl.get('invoice_transactions.action.edit_transaction')}
/> onClick={safeCallback(onEdit, original)}
<MenuItem />
text={intl.get('invoice_transactions.action.delete_transaction')} </Can>
intent={Intent.DANGER} <Can I={SaleReceiptAction.Edit} a={AbilitySubject.Receipt}>
onClick={safeCallback(onDelete, original)} <MenuItem
icon={<Icon icon="trash-16" iconSize={16} />} text={intl.get('invoice_transactions.action.delete_transaction')}
/> intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -10,16 +10,21 @@ import {
import styled from 'styled-components'; import styled from 'styled-components';
import { FormattedMessage as T } from 'components'; import { FormattedMessage as T } from 'components';
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider'; import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
import transactions from '../../../../common/itemPaymentTranactionsOption'; import { useGetItemPaymentTransactionsMenu } from '../../../../common/itemPaymentTranactionsOption';
export const ItemManuTransaction = ({ onChange }) => { export const ItemManuTransaction = ({ onChange }) => {
const { value, setValue } = useItemDetailDrawerContext(); const { value, setValue } = useItemDetailDrawerContext();
const itemTransactionMenu = useGetItemPaymentTransactionsMenu();
if (itemTransactionMenu.length === 0) {
return null;
}
const handleClickItem = (item) => { const handleClickItem = (item) => {
onChange && onChange(item); onChange && onChange(item);
}; };
const content = transactions.map(({ name, label }) => ( const content = itemTransactionMenu.map(({ name, label }) => (
<MenuItem onClick={() => handleClickItem(name)} text={label} /> <MenuItem onClick={() => handleClickItem(name)} text={label} />
)); ));

View File

@@ -1,8 +1,12 @@
import React from 'react'; import React from 'react';
import { Intent, MenuItem, Menu } from '@blueprintjs/core'; import { Intent, MenuItem, Menu } from '@blueprintjs/core';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { FormatDateCell, Icon } from 'components'; import { Can, FormatDateCell, Icon } from 'components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
VendorCreditAction,
AbilitySubject,
} from '../../../../common/abilityOption';
/** /**
* Actions menu. * Actions menu.
@@ -10,12 +14,14 @@ import { safeCallback } from 'utils';
export function ActionsMenu({ payload: { onDelete }, row: { original } }) { export function ActionsMenu({ payload: { onDelete }, row: { original } }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={VendorCreditAction.Delete} a={AbilitySubject.VendorCredit}>
icon={<Icon icon="trash-16" iconSize={16} />} <MenuItem
text={intl.get('delete_transaction')} icon={<Icon icon="trash-16" iconSize={16} />}
intent={Intent.DANGER} text={intl.get('delete_transaction')}
onClick={safeCallback(onDelete, original)} intent={Intent.DANGER}
/> onClick={safeCallback(onDelete, original)}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -1,8 +1,12 @@
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { Intent, MenuItem, Menu } from '@blueprintjs/core'; import { Intent, MenuItem, Menu } from '@blueprintjs/core';
import { FormatDateCell, Icon } from 'components'; import { Can, FormatDateCell, Icon } from 'components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
VendorCreditAction,
AbilitySubject,
} from '../../../../common/abilityOption';
/** /**
* Actions menu. * Actions menu.
@@ -10,12 +14,14 @@ import { safeCallback } from 'utils';
export function ActionsMenu({ payload: { onDelete }, row: { original } }) { export function ActionsMenu({ payload: { onDelete }, row: { original } }) {
return ( return (
<Menu> <Menu>
<MenuItem <Can I={VendorCreditAction.Delete} a={AbilitySubject.VendorCredit}>
icon={<Icon icon="trash-16" iconSize={16} />} <MenuItem
text={intl.get('delete_transaction')} icon={<Icon icon="trash-16" iconSize={16} />}
intent={Intent.DANGER} text={intl.get('delete_transaction')}
onClick={safeCallback(onDelete, original)} intent={Intent.DANGER}
/> onClick={safeCallback(onDelete, original)}
/>
</Can>
</Menu> </Menu>
); );
} }

View File

@@ -3,12 +3,16 @@ import { Tab } from '@blueprintjs/core';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import styled from 'styled-components'; import styled from 'styled-components';
import { DrawerMainTabs } from 'components'; import { Can, DrawerMainTabs } from 'components';
import VendorCreditDetailActionsBar from './VendorCreditDetailActionsBar'; import VendorCreditDetailActionsBar from './VendorCreditDetailActionsBar';
import VendorCreditDetailPanel from './VendorCreditDetailPanel'; import VendorCreditDetailPanel from './VendorCreditDetailPanel';
import RefundVendorCreditTransactionsTable from './RefundVendorCreditTransactions/RefundVendorCreditTransactionsTable'; import RefundVendorCreditTransactionsTable from './RefundVendorCreditTransactions/RefundVendorCreditTransactionsTable';
import ReconcileVendorCreditTransactionsTable from './ReconcileVendorCreditTransactions/ReconcileVendorCreditTransactionsTable'; import ReconcileVendorCreditTransactionsTable from './ReconcileVendorCreditTransactions/ReconcileVendorCreditTransactionsTable';
import { VendorCreditGLEntriesTable } from './JournalEntriesTransactions/JournalEntriesTransactionsTable'; import { VendorCreditGLEntriesTable } from './JournalEntriesTransactions/JournalEntriesTransactionsTable';
import {
VendorCreditAction,
AbilitySubject,
} from '../../../common/abilityOption';
/** /**
* Vendor credit view detail. * Vendor credit view detail.
@@ -40,16 +44,18 @@ function VendorCreditDetailsTabs() {
id={'journal_entries'} id={'journal_entries'}
panel={<VendorCreditGLEntriesTable />} panel={<VendorCreditGLEntriesTable />}
/> />
<Tab {/* <Can I={VendorCreditAction.View} a={AbilitySubject.VendorCredit}> */}
title={intl.get('vendor_credit.drawer.label_refund_transactions')} <Tab
id={'refund_transactions'} title={intl.get('vendor_credit.drawer.label_refund_transactions')}
panel={<RefundVendorCreditTransactionsTable />} id={'refund_transactions'}
/> panel={<RefundVendorCreditTransactionsTable />}
<Tab />
title={intl.get('vendor_credit.drawer.label_bills_reconciled')} <Tab
id={'reconcile_transactions'} title={intl.get('vendor_credit.drawer.label_bills_reconciled')}
panel={<ReconcileVendorCreditTransactionsTable />} id={'reconcile_transactions'}
/> panel={<ReconcileVendorCreditTransactionsTable />}
/>
{/* </Can> */}
</DrawerMainTabs> </DrawerMainTabs>
); );
} }

View File

@@ -11,7 +11,10 @@ import {
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar'; import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import { useVendorCreditDetailDrawerContext } from './VendorCreditDetailDrawerProvider'; import { useVendorCreditDetailDrawerContext } from './VendorCreditDetailDrawerProvider';
import { VendorCreditMenuItem } from './utils'; import { VendorCreditMenuItem } from './utils';
import {
VendorCreditAction,
AbilitySubject,
} from '../../../common/abilityOption';
import withDialogActions from 'containers/Dialog/withDialogActions'; 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';
@@ -59,43 +62,45 @@ function VendorCreditDetailActionsBar({
return ( return (
<DashboardActionsBar> <DashboardActionsBar>
<NavbarGroup> <NavbarGroup>
<Button <Can I={VendorCreditAction.Edit} a={AbilitySubject.VendorCredit}>
className={Classes.MINIMAL}
icon={<Icon icon="pen-18" />}
text={<T id={'vendor_credits.label.edit_vendor_credit'} />}
onClick={handleEditVendorCredit}
/>
<NavbarDivider />
<If condition={!vendorCredit.is_closed && !vendorCredit.is_draft}>
<Button <Button
className={Classes.MINIMAL} className={Classes.MINIMAL}
icon={<Icon icon="arrow-downward" iconSize={18} />} icon={<Icon icon="pen-18" />}
text={<T id={'refund'} />} text={<T id={'vendor_credits.label.edit_vendor_credit'} />}
onClick={handleRefundVendorCredit} onClick={handleEditVendorCredit}
/> />
<NavbarDivider /> <NavbarDivider />
</If> </Can>
<Button <Can I={VendorCreditAction.Refund} a={AbilitySubject.VendorCredit}>
className={Classes.MINIMAL} <If condition={!vendorCredit.is_closed && !vendorCredit.is_draft}>
icon={<Icon icon={'trash-16'} iconSize={16} />} <Button
text={<T id={'delete'} />} className={Classes.MINIMAL}
intent={Intent.DANGER} icon={<Icon icon="arrow-downward" iconSize={18} />}
onClick={handleDeleteVendorCredit} text={<T id={'refund'} />}
/> onClick={handleRefundVendorCredit}
<If />
condition={ <NavbarDivider />
!vendorCredit.is_closed && </If>
!vendorCredit.is_draft </Can>
// vendorCredit.is_published <Can I={VendorCreditAction.Delete} a={AbilitySubject.VendorCredit}>
} <Button
> className={Classes.MINIMAL}
<NavbarDivider /> icon={<Icon icon={'trash-16'} iconSize={16} />}
<VendorCreditMenuItem text={<T id={'delete'} />}
payload={{ intent={Intent.DANGER}
onReconcile: handleReconcileVendorCredit, onClick={handleDeleteVendorCredit}
}}
/> />
</If> </Can>
<Can I={VendorCreditAction.Edit} a={AbilitySubject.VendorCredit}>
<If condition={!vendorCredit.is_closed && !vendorCredit.is_draft}>
<NavbarDivider />
<VendorCreditMenuItem
payload={{
onReconcile: handleReconcileVendorCredit,
}}
/>
</If>
</Can>
</NavbarGroup> </NavbarGroup>
</DashboardActionsBar> </DashboardActionsBar>
); );

View File

@@ -10,6 +10,7 @@ import {
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { import {
Icon, Icon,
Can,
FormattedMessage as T, FormattedMessage as T,
DashboardActionViewsList, DashboardActionViewsList,
AdvancedFilterPopover, AdvancedFilterPopover,
@@ -19,7 +20,10 @@ import {
import DashboardActionsBar from '../../../../components/Dashboard/DashboardActionsBar'; import DashboardActionsBar from '../../../../components/Dashboard/DashboardActionsBar';
import { useVendorsCreditNoteListContext } from './VendorsCreditNoteListProvider'; import { useVendorsCreditNoteListContext } from './VendorsCreditNoteListProvider';
import {
VendorCreditAction,
AbilitySubject,
} from '../../../../common/abilityOption';
import withVendorsCreditNotes from './withVendorsCreditNotes'; import withVendorsCreditNotes from './withVendorsCreditNotes';
import withVendorsCreditNotesActions from './withVendorsCreditNotesActions'; import withVendorsCreditNotesActions from './withVendorsCreditNotesActions';
import withSettings from '../../../Settings/withSettings'; import withSettings from '../../../Settings/withSettings';
@@ -84,12 +88,14 @@ function VendorsCreditNoteActionsBar({
onChange={handleTabChange} onChange={handleTabChange}
/> />
<NavbarDivider /> <NavbarDivider />
<Button <Can I={VendorCreditAction.Create} a={AbilitySubject.VendorCredit}>
className={Classes.MINIMAL} <Button
icon={<Icon icon={'plus'} />} className={Classes.MINIMAL}
text={<T id={'vendor_credits.label.new_vendor_credit'} />} icon={<Icon icon={'plus'} />}
onClick={handleClickNewVendorCredit} text={<T id={'vendor_credits.label.new_vendor_credit'} />}
/> onClick={handleClickNewVendorCredit}
/>
</Can>
<AdvancedFilterPopover <AdvancedFilterPopover
advancedFilterProps={{ advancedFilterProps={{
conditions: vendorCreditFilterRoles, conditions: vendorCreditFilterRoles,

View File

@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core'; import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom'; import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components'; import { EmptyStatus } from 'components';
import { FormattedMessage as T } from 'components'; import { Can, FormattedMessage as T } from 'components';
import {
VendorCreditAction,
AbilitySubject,
} from '../../../../common/abilityOption';
export default function VendorsCreditNoteEmptyStatus() { export default function VendorsCreditNoteEmptyStatus() {
const history = useHistory(); const history = useHistory();
@@ -16,17 +20,19 @@ export default function VendorsCreditNoteEmptyStatus() {
} }
action={ action={
<> <>
<Button <Can I={VendorCreditAction.Create} a={AbilitySubject.VendorCredit}>
intent={Intent.PRIMARY} <Button
large={true} intent={Intent.PRIMARY}
onClick={() => history.push('/vendor-credits/new')} large={true}
> onClick={() => history.push('/vendor-credits/new')}
<T id={'vendor_credits.action.new_vendor_credit'} /> >
</Button> <T id={'vendor_credits.action.new_vendor_credit'} />
</Button>
<Button intent={Intent.NONE} large={true}> <Button intent={Intent.NONE} large={true}>
<T id={'learn_more'} /> <T id={'learn_more'} />
</Button> </Button>
</Can>
</> </>
} }
/> />

View File

@@ -10,8 +10,13 @@ import {
Choose, Choose,
If, If,
Icon, Icon,
Can,
} from 'components'; } from 'components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
VendorCreditAction,
AbilitySubject,
} from '../../../../common/abilityOption';
/** /**
* Actions menu. * Actions menu.
@@ -27,39 +32,51 @@ export function ActionsMenu({
text={intl.get('view_details')} text={intl.get('view_details')}
onClick={safeCallback(onViewDetails, original)} onClick={safeCallback(onViewDetails, original)}
/> />
<MenuDivider /> <Can I={VendorCreditAction.Edit} a={AbilitySubject.VendorCredit}>
<MenuItem <MenuDivider />
icon={<Icon icon="pen-18" />}
text={intl.get('vendor_credits.action.edit_vendor_credit')}
onClick={safeCallback(onEdit, original)}
/>
<If condition={!original.is_closed && original.is_published}>
<MenuItem <MenuItem
icon={<Icon icon="quick-payment-16" />} icon={<Icon icon="pen-18" />}
text={intl.get('vendor_credits.action.refund_vendor_credit')} text={intl.get('vendor_credits.action.edit_vendor_credit')}
onClick={safeCallback(onRefund, original)} onClick={safeCallback(onEdit, original)}
/> />
</If> <If condition={original.is_draft}>
<If condition={original.is_draft}> <MenuItem
icon={<Icon icon={'check'} iconSize={18} />}
text={intl.get('vendor_credits.action.mark_as_open')}
onClick={safeCallback(onOpen, original)}
/>
</If>
</Can>
<Can I={VendorCreditAction.Refund} a={AbilitySubject.VendorCredit}>
<If condition={!original.is_closed && original.is_published}>
<MenuItem
icon={<Icon icon="quick-payment-16" />}
text={intl.get('vendor_credits.action.refund_vendor_credit')}
onClick={safeCallback(onRefund, original)}
/>
</If>
</Can>
<Can I={VendorCreditAction.Edit} a={AbilitySubject.VendorCredit}>
<If
condition={
!original.is_draft && !original.is_closed && original.is_published
}
>
<MenuItem
// icon={<Icon icon="quick-payment-16" />}
text={intl.get('vendor_credits.action.reconcile_with_bills')}
onClick={safeCallback(onReconcile, original)}
/>
</If>
</Can>
<Can I={VendorCreditAction.Delete} a={AbilitySubject.VendorCredit}>
<MenuItem <MenuItem
icon={<Icon icon={'check'} iconSize={18} />} text={intl.get('vendor_credits.action.delete_vendor_credit')}
text={intl.get('vendor_credits.action.mark_as_open')} intent={Intent.DANGER}
onClick={safeCallback(onOpen, original)} onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/> />
</If> </Can>
<If condition={!original.is_draft && !original.is_closed && original.is_published}>
<MenuItem
// icon={<Icon icon="quick-payment-16" />}
text={intl.get('vendor_credits.action.reconcile_with_bills')}
onClick={safeCallback(onReconcile, original)}
/>
</If>
<MenuItem
text={intl.get('vendor_credits.action.delete_vendor_credit')}
intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/>
</Menu> </Menu>
); );
} }
@@ -83,8 +100,8 @@ export function StatusAccessor(creditNote) {
</Tag> </Tag>
</Choose.When> </Choose.When>
<Choose.When condition={creditNote.is_draft} round={true}> <Choose.When condition={creditNote.is_draft}>
<Tag minimal={true}> <Tag minimal={true} round={true}>
<T id={'draft'} /> <T id={'draft'} />
</Tag> </Tag>
</Choose.When> </Choose.When>

View File

@@ -10,6 +10,7 @@ import {
import { useHistory } from 'react-router-dom'; import { useHistory } from 'react-router-dom';
import { import {
Icon, Icon,
Can,
FormattedMessage as T, FormattedMessage as T,
DashboardActionViewsList, DashboardActionViewsList,
AdvancedFilterPopover, AdvancedFilterPopover,
@@ -19,7 +20,10 @@ import {
import DashboardActionsBar from '../../../../components/Dashboard/DashboardActionsBar'; import DashboardActionsBar from '../../../../components/Dashboard/DashboardActionsBar';
import { useCreditNoteListContext } from './CreditNotesListProvider'; import { useCreditNoteListContext } from './CreditNotesListProvider';
import {
CreditNoteAction,
AbilitySubject,
} from '../../../../common/abilityOption';
import withCreditNotes from './withCreditNotes'; import withCreditNotes from './withCreditNotes';
import withCreditNotesActions from './withCreditNotesActions'; import withCreditNotesActions from './withCreditNotesActions';
import withSettings from '../../../Settings/withSettings'; import withSettings from '../../../Settings/withSettings';
@@ -78,12 +82,14 @@ function CreditNotesActionsBar({
onChange={handleTabChange} onChange={handleTabChange}
/> />
<NavbarDivider /> <NavbarDivider />
<Button <Can I={CreditNoteAction.Create} a={AbilitySubject.CreditNote}>
className={Classes.MINIMAL} <Button
icon={<Icon icon={'plus'} />} className={Classes.MINIMAL}
text={<T id={'credit_note.label.new_credit_note'} />} icon={<Icon icon={'plus'} />}
onClick={handleClickNewCreateNote} text={<T id={'credit_note.label.new_credit_note'} />}
/> onClick={handleClickNewCreateNote}
/>
</Can>
<AdvancedFilterPopover <AdvancedFilterPopover
advancedFilterProps={{ advancedFilterProps={{
conditions: creditNoteFilterRoles, conditions: creditNoteFilterRoles,

View File

@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core'; import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom'; import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components'; import { EmptyStatus } from 'components';
import { FormattedMessage as T } from 'components'; import { Can, FormattedMessage as T } from 'components';
import {
CreditNoteAction,
AbilitySubject,
} from '../../../../common/abilityOption';
export default function CreditNotesEmptyStatus() { export default function CreditNotesEmptyStatus() {
const history = useHistory(); const history = useHistory();
@@ -16,17 +20,19 @@ export default function CreditNotesEmptyStatus() {
} }
action={ action={
<> <>
<Button <Can I={CreditNoteAction.Create} a={AbilitySubject.CreditNote}>
intent={Intent.PRIMARY} <Button
large={true} intent={Intent.PRIMARY}
onClick={() => history.push('/credit-notes/new')} large={true}
> onClick={() => history.push('/credit-notes/new')}
<T id={'credit_note.label.new_credit_note'} /> >
</Button> <T id={'credit_note.label.new_credit_note'} />
</Button>
<Button intent={Intent.NONE} large={true}> <Button intent={Intent.NONE} large={true}>
<T id={'learn_more'} /> <T id={'learn_more'} />
</Button> </Button>
</Can>
</> </>
} }
/> />

View File

@@ -10,8 +10,13 @@ import {
Choose, Choose,
If, If,
Icon, Icon,
Can,
} from 'components'; } from 'components';
import { safeCallback } from 'utils'; import { safeCallback } from 'utils';
import {
CreditNoteAction,
AbilitySubject,
} from '../../../../common/abilityOption';
export function ActionsMenu({ export function ActionsMenu({
payload: { onEdit, onDelete, onRefund, onOpen, onReconcile, onViewDetails }, payload: { onEdit, onDelete, onRefund, onOpen, onReconcile, onViewDetails },
@@ -24,37 +29,48 @@ export function ActionsMenu({
text={intl.get('view_details')} text={intl.get('view_details')}
onClick={safeCallback(onViewDetails, original)} onClick={safeCallback(onViewDetails, original)}
/> />
<MenuDivider /> <Can I={CreditNoteAction.Edit} a={AbilitySubject.CreditNote}>
<MenuItem <MenuDivider />
icon={<Icon icon="pen-18" />}
text={intl.get('credit_note.action.edit_credit_note')}
onClick={safeCallback(onEdit, original)}
/>
<If condition={original.is_draft}>
<MenuItem <MenuItem
icon={<Icon icon={'check'} iconSize={18} />} icon={<Icon icon="pen-18" />}
text={intl.get('credit_note.action.make_as_open')} text={intl.get('credit_note.action.edit_credit_note')}
onClick={safeCallback(onOpen, original)} onClick={safeCallback(onEdit, original)}
/> />
</If> <If condition={original.is_draft}>
<If condition={!original.is_closed && original.is_published}> <MenuItem
icon={<Icon icon={'check'} iconSize={18} />}
text={intl.get('credit_note.action.make_as_open')}
onClick={safeCallback(onOpen, original)}
/>
</If>
</Can>
<Can I={CreditNoteAction.Refund} a={AbilitySubject.CreditNote}>
<If condition={!original.is_closed && original.is_published}>
<MenuItem
icon={<Icon icon="quick-payment-16" />}
text={intl.get('credit_note.action.refund_credit_note')}
onClick={safeCallback(onRefund, original)}
/>
</If>
</Can>
<Can I={CreditNoteAction.Edit} a={AbilitySubject.CreditNote}>
<If condition={!original.is_closed && original.is_published}>
<MenuItem
text={intl.get('credit_note.action.reconcile_with_invoices')}
icon={<Icon icon="receipt-24" iconSize={16} />}
onClick={safeCallback(onReconcile, original)}
/>
</If>
</Can>
<Can I={CreditNoteAction.Delete} a={AbilitySubject.CreditNote}>
<MenuItem <MenuItem
icon={<Icon icon="quick-payment-16" />} text={intl.get('credit_note.action.delete_credit_note')}
text={intl.get('credit_note.action.refund_credit_note')} intent={Intent.DANGER}
onClick={safeCallback(onRefund, original)} onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/> />
<MenuItem </Can>
text={intl.get('credit_note.action.reconcile_with_invoices')}
icon={<Icon icon="receipt-24" iconSize={16} />}
onClick={safeCallback(onReconcile, original)}
/>
</If>
<MenuItem
text={intl.get('credit_note.action.delete_credit_note')}
intent={Intent.DANGER}
onClick={safeCallback(onDelete, original)}
icon={<Icon icon="trash-16" iconSize={16} />}
/>
</Menu> </Menu>
); );
} }

View File

@@ -1145,7 +1145,7 @@
"Landed": "Landed", "Landed": "Landed",
"This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.": "This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.", "This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.": "This options allows you to be able to add additional cost eg. freight then allocate cost to the items in your bills.",
"Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?": "Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?", "Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?": "Once your delete this located landed cost, you won't be able to restore it later, Are your sure you want to delete this transaction?",
"journal_entries": "Journal entries", "journal_entries": "Journal Entries",
"contact": "Contact", "contact": "Contact",
"invoice_details": "Invoice details", "invoice_details": "Invoice details",
"receipt_details": "Receipt details", "receipt_details": "Receipt details",