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

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

View File

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

View File

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

View File

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