From afee2e90e024c40f0df537761c29d00b0babdedc Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 15:24:53 +0200
Subject: [PATCH 01/18] ability.
---
src/components/Abilities.js | 10 ++++++++++
src/components/Can.js | 4 ++++
src/components/Config/ability.js | 10 ++++++++++
src/containers/Items/ItemsActionsBar.js | 20 +++++++++++++-------
4 files changed, 37 insertions(+), 7 deletions(-)
create mode 100644 src/components/Abilities.js
create mode 100644 src/components/Can.js
create mode 100644 src/components/Config/ability.js
diff --git a/src/components/Abilities.js b/src/components/Abilities.js
new file mode 100644
index 000000000..152ea01b0
--- /dev/null
+++ b/src/components/Abilities.js
@@ -0,0 +1,10 @@
+import { AbilityBuilder, defineAbility } from '@casl/ability';
+import { createContextualCan } from '@casl/react';
+import { createContext } from 'react';
+
+export const AbilityContext = createContext();
+export const Can = createContextualCan(AbilityContext.Consumer);
+
+export const ability = defineAbility((can, cannot) => {
+ cannot('Item', 'create');
+});
diff --git a/src/components/Can.js b/src/components/Can.js
new file mode 100644
index 000000000..9ba7fe434
--- /dev/null
+++ b/src/components/Can.js
@@ -0,0 +1,4 @@
+import { createCanBoundTo } from '@casl/react';
+import ability from '../components/Config/ability';
+
+export default createCanBoundTo(ability);
\ No newline at end of file
diff --git a/src/components/Config/ability.js b/src/components/Config/ability.js
new file mode 100644
index 000000000..72342959f
--- /dev/null
+++ b/src/components/Config/ability.js
@@ -0,0 +1,10 @@
+import { AbilityBuilder } from '@casl/ability';
+// import { AbilitySubject, ItemAbility } from '../../common/abilityOption';
+
+export function defineAbilitiesFor(role) {
+ const { rules, can } = new AbilityBuilder();
+
+ can('create', 'Item');
+
+ return new Ability(rules);
+}
diff --git a/src/containers/Items/ItemsActionsBar.js b/src/containers/Items/ItemsActionsBar.js
index 67e30c732..e882ac19d 100644
--- a/src/containers/Items/ItemsActionsBar.js
+++ b/src/containers/Items/ItemsActionsBar.js
@@ -30,6 +30,9 @@ import withSettings from '../Settings/withSettings';
import { compose } from 'utils';
import withSettingsActions from '../Settings/withSettingsActions';
+
+import { Can, AbilityContext } from '../../components/Abilities';
+
/**
* Items actions bar.
*/
@@ -57,6 +60,8 @@ function ItemsActionsBar({
// Items refresh action.
const { refresh } = useRefreshItems();
+ const { ability } = React.useContext(AbilityContext);
+
// History context.
const history = useHistory();
@@ -101,13 +106,14 @@ function ItemsActionsBar({
/>
- }
- text={}
- onClick={onClickNewItem}
- />
-
+ {/* */}
+ }
+ text={}
+ onClick={onClickNewItem}
+ />
+ {/* */}
Date: Tue, 23 Nov 2021 16:51:40 +0200
Subject: [PATCH 02/18] feat: item & inventory.
---
src/common/abilityOption.js | 17 ++++
src/components/Abilities.js | 10 ---
src/components/Can.js | 31 ++++++-
src/components/Config/ability.js | 10 ---
src/components/Dashboard/DashboardProvider.js | 3 +-
src/components/index.js | 2 +
.../InventoryAdjustmentDetailActionsBar.js | 30 ++++---
.../ItemDetailDrawer/ItemDetailActionsBar.js | 36 ++++----
.../InventoryAdjustments/components.js | 40 ++++++---
src/containers/Items/ItemsActionsBar.js | 22 ++---
src/containers/Items/components.js | 82 ++++++++++++-------
11 files changed, 177 insertions(+), 106 deletions(-)
create mode 100644 src/common/abilityOption.js
delete mode 100644 src/components/Abilities.js
delete mode 100644 src/components/Config/ability.js
diff --git a/src/common/abilityOption.js b/src/common/abilityOption.js
new file mode 100644
index 000000000..d829d52a9
--- /dev/null
+++ b/src/common/abilityOption.js
@@ -0,0 +1,17 @@
+export const AbilitySubject = {
+ Item: 'Item',
+ InventoryAdjustment: 'InventoryAdjustment',
+};
+
+export const ItemAbility = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+
+export const InventoryAdjustment = {
+ View: 'view',
+ Create: 'create',
+ Delete: 'delete',
+};
diff --git a/src/components/Abilities.js b/src/components/Abilities.js
deleted file mode 100644
index 152ea01b0..000000000
--- a/src/components/Abilities.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { AbilityBuilder, defineAbility } from '@casl/ability';
-import { createContextualCan } from '@casl/react';
-import { createContext } from 'react';
-
-export const AbilityContext = createContext();
-export const Can = createContextualCan(AbilityContext.Consumer);
-
-export const ability = defineAbility((can, cannot) => {
- cannot('Item', 'create');
-});
diff --git a/src/components/Can.js b/src/components/Can.js
index 9ba7fe434..63b614036 100644
--- a/src/components/Can.js
+++ b/src/components/Can.js
@@ -1,4 +1,29 @@
-import { createCanBoundTo } from '@casl/react';
-import ability from '../components/Config/ability';
+import React from 'react';
+import { Ability } from '@casl/ability';
+import { createContextualCan } from '@casl/react';
-export default createCanBoundTo(ability);
\ No newline at end of file
+import {
+ ItemAbility,
+ AbilitySubject,
+ InventoryAdjustment,
+} from '../common/abilityOption';
+
+export const AbilityContext = React.createContext();
+export const Can = createContextualCan(AbilityContext.Consumer);
+
+const AbilityContextProvider = (props) => {
+ const ability = new Ability([
+ {
+ subject: [AbilitySubject.Item],
+ action: [ItemAbility.Create, ItemAbility.Edit],
+ },
+ ]);
+
+ return (
+
+ {props.children}
+
+ );
+};
+
+export default AbilityContextProvider;
diff --git a/src/components/Config/ability.js b/src/components/Config/ability.js
deleted file mode 100644
index 72342959f..000000000
--- a/src/components/Config/ability.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { AbilityBuilder } from '@casl/ability';
-// import { AbilitySubject, ItemAbility } from '../../common/abilityOption';
-
-export function defineAbilitiesFor(role) {
- const { rules, can } = new AbilityBuilder();
-
- can('create', 'Item');
-
- return new Ability(rules);
-}
diff --git a/src/components/Dashboard/DashboardProvider.js b/src/components/Dashboard/DashboardProvider.js
index 5a5fce966..77195b3c1 100644
--- a/src/components/Dashboard/DashboardProvider.js
+++ b/src/components/Dashboard/DashboardProvider.js
@@ -1,8 +1,9 @@
import React from 'react';
+import AbilityContextProvider from '../../components/Can';
/**
* Dashboard provider.
*/
export default function DashboardProvider({ children }) {
- return children;
+ return {children};
}
diff --git a/src/components/index.js b/src/components/index.js
index f30398145..5dc3efeb7 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -59,6 +59,7 @@ import AvaterCell from './AvaterCell';
import { ItemsMultiSelect } from './Items';
import MoreMenuItems from './MoreMenutItems';
+import { Can } from './Can';
export * from './Dialog';
export * from './Menu';
@@ -156,4 +157,5 @@ export {
Card,
AvaterCell,
MoreMenuItems,
+ Can,
};
diff --git a/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js b/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
index e0231a3e9..712ca6edd 100644
--- a/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
+++ b/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
@@ -7,7 +7,11 @@ import { useInventoryAdjustmentDrawerContext } from './InventoryAdjustmentDrawer
import withAlertsActions from 'containers/Alert/withAlertActions';
-import { Icon, FormattedMessage as T } from 'components';
+import { Icon, FormattedMessage as T, Can } from 'components';
+import {
+ InventoryAdjustment,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { compose } from 'utils';
@@ -26,17 +30,19 @@ function InventoryAdjustmentDetailActionsBar({
};
return (
-
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteInventoryAdjustment}
- />
-
-
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteInventoryAdjustment}
+ />
+
+
+
);
}
diff --git a/src/containers/Drawers/ItemDetailDrawer/ItemDetailActionsBar.js b/src/containers/Drawers/ItemDetailDrawer/ItemDetailActionsBar.js
index 8db499898..269e23b87 100644
--- a/src/containers/Drawers/ItemDetailDrawer/ItemDetailActionsBar.js
+++ b/src/containers/Drawers/ItemDetailDrawer/ItemDetailActionsBar.js
@@ -10,11 +10,12 @@ import {
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import { useItemDetailDrawerContext } from './ItemDetailDrawerProvider';
+import { ItemAbility, AbilitySubject } from '../../../common/abilityOption';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
-import { Icon, FormattedMessage as T } from 'components';
+import { Icon, FormattedMessage as T, Can } from 'components';
import { compose } from 'utils';
@@ -47,20 +48,25 @@ function ItemDetailActionsBar({
return (
- }
- text={}
- onClick={handleEditItem}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteItem}
- />
+
+ }
+ text={}
+ onClick={handleEditItem}
+ />
+
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteItem}
+ />
+
);
diff --git a/src/containers/InventoryAdjustments/components.js b/src/containers/InventoryAdjustments/components.js
index eaa923e08..d1f862b66 100644
--- a/src/containers/InventoryAdjustments/components.js
+++ b/src/containers/InventoryAdjustments/components.js
@@ -12,10 +12,14 @@ import {
import intl from 'react-intl-universal';
import moment from 'moment';
-import { FormattedMessage as T } from 'components';
+import { FormattedMessage as T, Can } from 'components';
import { isNumber } from 'lodash';
import { Icon, Money, If } from 'components';
import { isBlank, safeCallback } from 'utils';
+import {
+ InventoryAdjustment,
+ AbilitySubject,
+} from '../../common/abilityOption';
/**
* Publish accessor
@@ -102,20 +106,30 @@ export const ActionsMenu = ({
text={intl.get('view_details')}
onClick={safeCallback(onViewDetails, original)}
/>
-
- }
- text={intl.get('publish_adjustment')}
- onClick={safeCallback(onPublish, original)}
- />
+
+
+ }
+ text={intl.get('publish_adjustment')}
+ onClick={safeCallback(onPublish, original)}
+ />
+
- }
- />
+
+ }
+ />
+
);
};
diff --git a/src/containers/Items/ItemsActionsBar.js b/src/containers/Items/ItemsActionsBar.js
index e882ac19d..387a83ee5 100644
--- a/src/containers/Items/ItemsActionsBar.js
+++ b/src/containers/Items/ItemsActionsBar.js
@@ -14,6 +14,7 @@ import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import Icon from 'components/Icon';
import {
If,
+ Can,
DashboardActionViewsList,
AdvancedFilterPopover,
DashboardFilterButton,
@@ -30,8 +31,7 @@ import withSettings from '../Settings/withSettings';
import { compose } from 'utils';
import withSettingsActions from '../Settings/withSettingsActions';
-
-import { Can, AbilityContext } from '../../components/Abilities';
+import { ItemAbility, AbilitySubject } from '../../common/abilityOption';
/**
* Items actions bar.
@@ -60,8 +60,6 @@ function ItemsActionsBar({
// Items refresh action.
const { refresh } = useRefreshItems();
- const { ability } = React.useContext(AbilityContext);
-
// History context.
const history = useHistory();
@@ -106,14 +104,14 @@ function ItemsActionsBar({
/>
- {/* */}
+
}
text={}
onClick={onClickNewItem}
/>
- {/* */}
+
- }
- defaultChecked={itemsInactiveMode}
- onChange={handleInactiveSwitchChange}
- />
+
+ }
+ defaultChecked={itemsInactiveMode}
+ onChange={handleInactiveSwitchChange}
+ />
+
diff --git a/src/containers/Items/components.js b/src/containers/Items/components.js
index d573f4aaf..add7e1252 100644
--- a/src/containers/Items/components.js
+++ b/src/containers/Items/components.js
@@ -12,8 +12,13 @@ import {
import intl from 'react-intl-universal';
import { isNumber } from 'lodash';
-import { FormattedMessage as T, Icon, Money, If } from 'components';
+import { FormattedMessage as T, Icon, Money, If, Can } from 'components';
import { isBlank, safeCallback } from 'utils';
+import {
+ ItemAbility,
+ InventoryAdjustment,
+ AbilitySubject,
+} from '../../common/abilityOption';
/**
* Publish accessor
@@ -91,43 +96,58 @@ export function ItemsActionMenuList({
onClick={safeCallback(onViewDetails, original)}
/>
- }
- text={intl.get('edit_item')}
- onClick={safeCallback(onEditItem, original)}
- />
- }
- text={intl.get('duplicate')}
- onClick={safeCallback(onDuplicate, original)}
- />
-
+
}
- onClick={safeCallback(onInactivateItem, original)}
+ icon={}
+ text={intl.get('edit_item')}
+ onClick={safeCallback(onEditItem, original)}
/>
+
+
+ }
+ text={intl.get('duplicate')}
+ onClick={safeCallback(onDuplicate, original)}
+ />
+
+
+
+ }
+ onClick={safeCallback(onInactivateItem, original)}
+ />
+
- }
- onClick={safeCallback(onActivateItem, original)}
- />
+
+ }
+ onClick={safeCallback(onActivateItem, original)}
+ />
+
- }
- onClick={safeCallback(onMakeAdjustment, original)}
- />
+
+ }
+ onClick={safeCallback(onMakeAdjustment, original)}
+ />
+
- }
- onClick={safeCallback(onDeleteItem, original)}
- intent={Intent.DANGER}
- />
+
+ }
+ onClick={safeCallback(onDeleteItem, original)}
+ intent={Intent.DANGER}
+ />
+
);
}
From fca4dedeacfac7ebe18984c63007bcf4dbb50ffe Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 19:29:58 +0200
Subject: [PATCH 03/18] feat: add item & inventory adjustment ability.
---
src/common/abilityOption.js | 71 +++++++++++++++++--
src/components/Can.js | 18 +++--
.../InventoryAdjustmentDetailActionsBar.js | 7 +-
.../ItemDetailDrawer/ItemDetailActionsBar.js | 6 +-
.../InventoryAdjustments/components.js | 21 +++---
src/containers/Items/ItemsActionsBar.js | 6 +-
src/containers/Items/components.js | 42 +++++------
7 files changed, 124 insertions(+), 47 deletions(-)
diff --git a/src/common/abilityOption.js b/src/common/abilityOption.js
index d829d52a9..757e36c1f 100644
--- a/src/common/abilityOption.js
+++ b/src/common/abilityOption.js
@@ -1,17 +1,80 @@
export const AbilitySubject = {
Item: 'Item',
- InventoryAdjustment: 'InventoryAdjustment',
+ Inventory_Adjustment: 'Inventory_Adjustment',
+ Estimate: 'Estimate',
+ Invoice: 'Invoice',
+ Receipt: 'Receipt',
+ PaymentReceive: 'PaymentReceive',
+ Bill: 'Bill',
+ PaymentMade: 'PaymentMade',
+ Customer: 'Customer',
+ Vendor: 'Vendor',
};
-export const ItemAbility = {
+export const Item_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
Delete: 'delete',
};
-export const InventoryAdjustment = {
- View: 'view',
+export const Inventory_Adjustment_Abilities = {
Create: 'create',
+ View: 'view',
+ Delete: 'delete',
+};
+
+export const SaleEstimate = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+
+export const SaleInvoice = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+ BadDebt: 'bad-debt',
+};
+
+export const SaleReceipt = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+
+export const PaymentReceive = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+
+export const Bill = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+
+export const PaymentMade = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+export const CustomerAbilities = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+export const VendorAbilities = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
Delete: 'delete',
};
diff --git a/src/components/Can.js b/src/components/Can.js
index 63b614036..355e1610e 100644
--- a/src/components/Can.js
+++ b/src/components/Can.js
@@ -3,9 +3,15 @@ import { Ability } from '@casl/ability';
import { createContextualCan } from '@casl/react';
import {
- ItemAbility,
+ Item_Abilities,
AbilitySubject,
- InventoryAdjustment,
+ Inventory_Adjustment_Abilities,
+ SaleEstimate,
+ SaleInvoice,
+ SaleReceipt,
+ PaymentReceive,
+ Bill,
+ PaymentMade,
} from '../common/abilityOption';
export const AbilityContext = React.createContext();
@@ -14,8 +20,12 @@ export const Can = createContextualCan(AbilityContext.Consumer);
const AbilityContextProvider = (props) => {
const ability = new Ability([
{
- subject: [AbilitySubject.Item],
- action: [ItemAbility.Create, ItemAbility.Edit],
+ subject: [AbilitySubject.PaymentMade],
+ action: [PaymentMade.Edit],
+ },
+ {
+ subject: [AbilitySubject.Bill],
+ action: [Bill.Create],
},
]);
diff --git a/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js b/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
index 712ca6edd..139220cf2 100644
--- a/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
+++ b/src/containers/Drawers/InventoryAdjustmentDetailDrawer/InventoryAdjustmentDetailActionsBar.js
@@ -9,7 +9,7 @@ import withAlertsActions from 'containers/Alert/withAlertActions';
import { Icon, FormattedMessage as T, Can } from 'components';
import {
- InventoryAdjustment,
+ Inventory_Adjustment_Abilities,
AbilitySubject,
} from '../../../common/abilityOption';
@@ -30,7 +30,10 @@ function InventoryAdjustmentDetailActionsBar({
};
return (
-
+
+
-
+
}
@@ -153,7 +153,7 @@ function ItemsActionsBar({
onChange={handleTableRowSizeChange}
/>
-
+
}
defaultChecked={itemsInactiveMode}
diff --git a/src/containers/Items/components.js b/src/containers/Items/components.js
index add7e1252..dd26ba711 100644
--- a/src/containers/Items/components.js
+++ b/src/containers/Items/components.js
@@ -15,9 +15,9 @@ import { isNumber } from 'lodash';
import { FormattedMessage as T, Icon, Money, If, Can } from 'components';
import { isBlank, safeCallback } from 'utils';
import {
- ItemAbility,
- InventoryAdjustment,
AbilitySubject,
+ Item_Abilities,
+ Inventory_Adjustment_Abilities,
} from '../../common/abilityOption';
/**
@@ -95,52 +95,52 @@ export function ItemsActionMenuList({
text={}
onClick={safeCallback(onViewDetails, original)}
/>
-
-
+
+
}
text={intl.get('edit_item')}
onClick={safeCallback(onEditItem, original)}
/>
-
+
}
text={intl.get('duplicate')}
onClick={safeCallback(onDuplicate, original)}
/>
-
-
+
+
}
onClick={safeCallback(onInactivateItem, original)}
/>
-
-
-
-
+
+
+
+
}
onClick={safeCallback(onActivateItem, original)}
/>
-
-
-
-
+
+
+
+
}
onClick={safeCallback(onMakeAdjustment, original)}
/>
-
-
-
+
+
+
}
From fc74346695395ac9315aa2546fc897a8e6238e96 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 19:37:49 +0200
Subject: [PATCH 04/18] feat: add estimate ability.
---
.../EstimateDetailActionsBar.js | 54 ++++----
.../EstimatesLanding/EstimatesActionsBar.js | 19 ++-
.../Estimates/EstimatesLanding/components.js | 120 ++++++++++--------
3 files changed, 113 insertions(+), 80 deletions(-)
diff --git a/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.js b/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.js
index 1a7c3c051..c978931bd 100644
--- a/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.js
+++ b/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.js
@@ -14,8 +14,12 @@ import { useEstimateDetailDrawerContext } from './EstimateDetailDrawerProvider';
import withDialogActions from 'containers/Dialog/withDialogActions';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
+import {
+ Estimate_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
-import { Icon, FormattedMessage as T, MoreMenuItems } from 'components';
+import { Icon, FormattedMessage as T, MoreMenuItems, Can } from 'components';
import { compose } from 'utils';
@@ -59,27 +63,33 @@ function EstimateDetailActionsBar({
return (
- }
- text={}
- onClick={handleEditEstimate}
- />
-
- }
- text={}
- onClick={handlePrintEstimate}
- />
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteEstimate}
- />
-
+
+ }
+ text={}
+ onClick={handleEditEstimate}
+ />
+
+
+
+ }
+ text={}
+ onClick={handlePrintEstimate}
+ />
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteEstimate}
+ />
+
+
- }
- text={}
- onClick={onClickNewEstimate}
- />
+
+ }
+ text={}
+ onClick={onClickNewEstimate}
+ />
+
-
- }
- text={intl.get('edit_estimate')}
- onClick={safeCallback(onEdit, original)}
- />
- }
- text={intl.get('convert_to_invoice')}
- onClick={safeCallback(onConvert, original)}
- />
-
+
+
}
- text={intl.get('mark_as_delivered')}
- onClick={safeCallback(onDeliver, original)}
+ icon={}
+ text={intl.get('edit_estimate')}
+ onClick={safeCallback(onEdit, original)}
/>
-
-
-
- }
- text={intl.get('mark_as_rejected')}
- onClick={safeCallback(onReject, original)}
- />
-
-
+ }
+ text={intl.get('convert_to_invoice')}
+ onClick={safeCallback(onConvert, original)}
+ />
+
+
}
- text={intl.get('mark_as_approved')}
- onClick={safeCallback(onApprove, original)}
+ text={intl.get('mark_as_delivered')}
+ onClick={safeCallback(onDeliver, original)}
/>
-
-
- }
- text={intl.get('mark_as_approved')}
- onClick={safeCallback(onApprove, original)}
- />
- }
- text={intl.get('mark_as_rejected')}
- onClick={safeCallback(onReject, original)}
- />
-
-
- }
- text={intl.get('print')}
- onClick={safeCallback(onPrint, original)}
- />
- }
- />
+
+
+
+ }
+ text={intl.get('mark_as_rejected')}
+ onClick={safeCallback(onReject, original)}
+ />
+
+
+ }
+ text={intl.get('mark_as_approved')}
+ onClick={safeCallback(onApprove, original)}
+ />
+
+
+ }
+ text={intl.get('mark_as_approved')}
+ onClick={safeCallback(onApprove, original)}
+ />
+ }
+ text={intl.get('mark_as_rejected')}
+ onClick={safeCallback(onReject, original)}
+ />
+
+
+
+
+ }
+ text={intl.get('print')}
+ onClick={safeCallback(onPrint, original)}
+ />
+
+
+ }
+ />
+
);
}
From c2650c76e8633369080e7c2a2cd7322494128c4c Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 20:03:26 +0200
Subject: [PATCH 05/18] feat: add invoice ability.
---
.../InvoiceDetailActionsBar.js | 86 +++++++++++--------
.../InvoicesLanding/InvoicesActionsBar.js | 20 +++--
.../Invoices/InvoicesLanding/components.js | 70 +++++++++------
3 files changed, 106 insertions(+), 70 deletions(-)
diff --git a/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js b/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js
index b4fa903b7..24052211c 100644
--- a/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js
+++ b/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js
@@ -16,7 +16,12 @@ import withDialogActions from 'containers/Dialog/withDialogActions';
import withAlertsActions from 'containers/Alert/withAlertActions';
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';
@@ -78,43 +83,54 @@ function InvoiceDetailActionsBar({
return (
- }
- text={}
- onClick={handleEditInvoice}
- />
-
-
+
}
- text={}
- onClick={handleQuickPaymentInvoice}
+ icon={}
+ text={}
+ onClick={handleEditInvoice}
/>
-
-
- }
- text={}
- onClick={handlePrintInvoice}
- />
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteInvoice}
- />
-
-
+
+
+
+
+
+ }
+ text={}
+ onClick={handleQuickPaymentInvoice}
+ />
+
+
+
+
+ }
+ text={}
+ onClick={handlePrintInvoice}
+ />
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteInvoice}
+ />
+
+
+
+
+
);
diff --git a/src/containers/Sales/Invoices/InvoicesLanding/InvoicesActionsBar.js b/src/containers/Sales/Invoices/InvoicesLanding/InvoicesActionsBar.js
index 6b03ab3a7..c91b96e96 100644
--- a/src/containers/Sales/Invoices/InvoicesLanding/InvoicesActionsBar.js
+++ b/src/containers/Sales/Invoices/InvoicesLanding/InvoicesActionsBar.js
@@ -18,7 +18,11 @@ import {
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 { useInvoicesListContext } from './InvoicesListProvider';
@@ -84,12 +88,14 @@ function InvoiceActionsBar({
onChange={handleTabChange}
/>
- }
- text={}
- onClick={handleClickNewInvoice}
- />
+
+ }
+ text={}
+ onClick={handleClickNewInvoice}
+ />
+
{
return (
@@ -55,7 +61,6 @@ export const statusAccessor = (row) => {
})}
-
- }
- text={intl.get('edit_invoice')}
- onClick={safeCallback(onEdit, original)}
- />
-
+
+
}
- text={intl.get('mark_as_delivered')}
- onClick={safeCallback(onDeliver, original)}
+ icon={}
+ text={intl.get('edit_invoice')}
+ onClick={safeCallback(onEdit, original)}
/>
-
-
+
+
+ }
+ text={intl.get('mark_as_delivered')}
+ onClick={safeCallback(onDeliver, original)}
+ />
+
+
+
+
+ }
+ text={intl.get('add_payment')}
+ onClick={safeCallback(onQuick, original)}
+ />
+
+
+
}
- text={intl.get('add_payment')}
- onClick={safeCallback(onQuick, original)}
+ icon={}
+ text={intl.get('print')}
+ onClick={safeCallback(onPrint, original)}
/>
-
- }
- text={intl.get('print')}
- onClick={safeCallback(onPrint, original)}
- />
- }
- />
+
+
+ }
+ />
+
);
}
From 371e374dc5fcacefc47e995f934840ac756dcbc9 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 20:08:05 +0200
Subject: [PATCH 06/18] feat: add receipt ability.
---
.../ReceiptDetailActionBar.js | 54 +++++++++++-------
.../ReceiptsLanding/ReceiptActionsBar.js | 21 ++++---
.../Receipts/ReceiptsLanding/components.js | 57 +++++++++++--------
3 files changed, 80 insertions(+), 52 deletions(-)
diff --git a/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.js b/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.js
index 608805a00..de6683e43 100644
--- a/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.js
+++ b/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.js
@@ -14,8 +14,12 @@ import withDialogActions from 'containers/Dialog/withDialogActions';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
-import { Icon, FormattedMessage as T, MoreMenuItems } from 'components';
+import { Can, Icon, FormattedMessage as T, MoreMenuItems } from 'components';
import { useReceiptDetailDrawerContext } from './ReceiptDetailDrawerProvider';
+import {
+ Receipt_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { safeCallback, compose } from 'utils';
@@ -54,27 +58,33 @@ function ReceiptDetailActionBar({
return (
- }
- text={}
- onClick={safeCallback(onEditReceipt)}
- />
-
- }
- text={}
- onClick={safeCallback(onPrintReceipt)}
- />
- }
- text={}
- intent={Intent.DANGER}
- onClick={safeCallback(onDeleteReceipt)}
- />
-
+
+ }
+ text={}
+ onClick={safeCallback(onEditReceipt)}
+ />
+
+
+
+ }
+ text={}
+ onClick={safeCallback(onPrintReceipt)}
+ />
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDeleteReceipt)}
+ />
+
+
- }
- text={}
- onClick={onClickNewReceipt}
- />
+
+ }
+ text={}
+ onClick={onClickNewReceipt}
+ />
+
-
- }
- text={intl.get('edit_receipt')}
- onClick={safeCallback(onEdit, receipt)}
- />
-
+
+
}
- text={intl.get('mark_as_closed')}
- onClick={safeCallback(onClose, receipt)}
+ icon={}
+ text={intl.get('edit_receipt')}
+ onClick={safeCallback(onEdit, receipt)}
/>
-
- }
- text={intl.get('print')}
- onClick={safeCallback(onPrint, receipt)}
- />
- }
- />
+
+
+ }
+ text={intl.get('mark_as_closed')}
+ onClick={safeCallback(onClose, receipt)}
+ />
+
+
+
+ }
+ text={intl.get('print')}
+ onClick={safeCallback(onPrint, receipt)}
+ />
+
+
+ }
+ />
+
);
}
From 3a8e1f523851ec3ec38582b54ef259dbee7e0705 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 20:15:29 +0200
Subject: [PATCH 07/18] feat: add payment receive ability.
---
.../InvoiceDetailActionsBar.js | 4 +-
.../PaymentReceiveActionsBar.js | 37 +++++++++++--------
.../Invoices/InvoicesLanding/components.js | 4 +-
.../PaymentReceiveActionsBar.js | 21 +++++++----
.../PaymentsLanding/components.js | 35 +++++++++++-------
5 files changed, 59 insertions(+), 42 deletions(-)
diff --git a/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js b/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js
index 24052211c..1218a1cbb 100644
--- a/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js
+++ b/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js
@@ -19,7 +19,7 @@ import withDrawerActions from 'containers/Drawer/withDrawerActions';
import { If, Can, Icon, FormattedMessage as T } from 'components';
import {
Invoice_Abilities,
- PaymentReceive,
+ Payment_Receive_Abilities,
AbilitySubject,
} from '../../../common/abilityOption';
@@ -93,7 +93,7 @@ function InvoiceDetailActionsBar({
-
+
- }
- text={}
- onClick={handleEditPaymentReceive}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeletePaymentReceive}
- />
-
+
+ }
+ text={}
+ onClick={handleEditPaymentReceive}
+ />
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeletePaymentReceive}
+ />
+
+
-
+
}
diff --git a/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceiveActionsBar.js b/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceiveActionsBar.js
index bb67f91a3..13b31fa98 100644
--- a/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceiveActionsBar.js
+++ b/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceiveActionsBar.js
@@ -19,14 +19,17 @@ import {
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
-import { If, DashboardActionViewsList } from 'components';
+import { Can, If, DashboardActionViewsList } from 'components';
import withPaymentReceivesActions from './withPaymentReceivesActions';
import withPaymentReceives from './withPaymentReceives';
import withSettingsActions from 'containers/Settings/withSettingsActions';
import withSettings from 'containers/Settings/withSettings';
-
+import {
+ Payment_Receive_Abilities,
+ AbilitySubject,
+} from '../../../../common/abilityOption';
import { compose } from 'utils';
import { usePaymentReceivesListContext } from './PaymentReceiptsListProvider';
import { useRefreshPaymentReceive } from 'hooks/query/paymentReceives';
@@ -85,12 +88,14 @@ function PaymentReceiveActionsBar({
onChange={handleTabChange}
/>
- }
- text={}
- onClick={handleClickNewPaymentReceive}
- />
+
+ }
+ text={}
+ onClick={handleClickNewPaymentReceive}
+ />
+
-
- }
- text={intl.get('edit_payment_receive')}
- onClick={safeCallback(onEdit, paymentReceive)}
- />
- }
- />
+
+
+ }
+ text={intl.get('edit_payment_receive')}
+ onClick={safeCallback(onEdit, paymentReceive)}
+ />
+
+
+ }
+ />
+
);
}
From 1cba4b5f18a9e202746f0750624d353ba22c9268 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 20:29:35 +0200
Subject: [PATCH 08/18] feat: add bill & payment made ability.
---
.../BillDrawer/BillDetailActionsBar.js | 56 ++++++++++------
.../PaymentMadeDetailActionsBar.js | 39 ++++++-----
.../Bills/BillsLanding/BillsActionsBar.js | 16 +++--
.../Bills/BillsLanding/components.js | 64 +++++++++++--------
.../PaymentsLanding/PaymentMadeActionsBar.js | 21 ++++--
.../PaymentsLanding/components.js | 36 +++++++----
6 files changed, 143 insertions(+), 89 deletions(-)
diff --git a/src/containers/Drawers/BillDrawer/BillDetailActionsBar.js b/src/containers/Drawers/BillDrawer/BillDetailActionsBar.js
index 8a14d3795..05d450b43 100644
--- a/src/containers/Drawers/BillDrawer/BillDetailActionsBar.js
+++ b/src/containers/Drawers/BillDrawer/BillDetailActionsBar.js
@@ -16,7 +16,12 @@ import withDialogActions from 'containers/Dialog/withDialogActions';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
-import { If, Icon, FormattedMessage as T } from 'components';
+import { Can, If, Icon, FormattedMessage as T } from 'components';
+import {
+ Bill_Abilities,
+ Payment_Made_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { safeCallback, compose } from 'utils';
@@ -53,29 +58,38 @@ function BillDetailActionsBar({
return (
- }
- text={}
- onClick={safeCallback(onEditBill)}
- />
-
-
+
}
- text={}
- onClick={handleQuickBillPayment}
+ icon={}
+ text={}
+ onClick={safeCallback(onEditBill)}
/>
-
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={safeCallback(onDeleteBill)}
- />
+
+
+
+
+ }
+ text={}
+ onClick={handleQuickBillPayment}
+ />
+
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDeleteBill)}
+ />
+
);
diff --git a/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailActionsBar.js b/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailActionsBar.js
index 4c3d4eb47..8ad09b10f 100644
--- a/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailActionsBar.js
+++ b/src/containers/Drawers/PaymentMadeDetailDrawer/PaymentMadeDetailActionsBar.js
@@ -16,8 +16,11 @@ import withDialogActions from 'containers/Dialog/withDialogActions';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
-import { Icon, FormattedMessage as T } from 'components';
-
+import { Can, Icon, FormattedMessage as T } from 'components';
+import {
+ Payment_Made_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { compose } from 'utils';
/**
@@ -48,20 +51,24 @@ function PaymentMadeDetailActionsBar({
return (
- }
- text={}
- onClick={handleEditPaymentMade}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeletePaymentMade}
- />
+
+ }
+ text={}
+ onClick={handleEditPaymentMade}
+ />
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeletePaymentMade}
+ />
+
);
diff --git a/src/containers/Purchases/Bills/BillsLanding/BillsActionsBar.js b/src/containers/Purchases/Bills/BillsLanding/BillsActionsBar.js
index d021d63b2..78ca384f0 100644
--- a/src/containers/Purchases/Bills/BillsLanding/BillsActionsBar.js
+++ b/src/containers/Purchases/Bills/BillsLanding/BillsActionsBar.js
@@ -14,12 +14,14 @@ import { useHistory } from 'react-router-dom';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import {
If,
+ Can,
FormattedMessage as T,
DashboardActionViewsList,
DashboardFilterButton,
AdvancedFilterPopover,
DashboardRowsHeightButton,
} from 'components';
+import { Bill_Abilities, AbilitySubject } from '../../../../common/abilityOption';
import withBillsActions from './withBillsActions';
import withBills from './withBills';
@@ -86,12 +88,14 @@ function BillActionsBar({
onChange={handleTabChange}
/>
- }
- text={}
- onClick={handleClickNewBill}
- />
+
+ }
+ text={}
+ onClick={handleClickNewBill}
+ />
+
-
- }
- text={intl.get('edit_bill')}
- onClick={safeCallback(onEdit, original)}
- />
+
+
+ }
+ text={intl.get('edit_bill')}
+ onClick={safeCallback(onEdit, original)}
+ />
-
- }
- text={intl.get('mark_as_opened')}
- onClick={safeCallback(onOpen, original)}
- />
-
-
- }
- text={intl.get('add_payment')}
- onClick={safeCallback(onQuick, original)}
- />
-
+
+ }
+ text={intl.get('mark_as_opened')}
+ onClick={safeCallback(onOpen, original)}
+ />
+
+
+
+
+ }
+ text={intl.get('add_payment')}
+ onClick={safeCallback(onQuick, original)}
+ />
+
+
}
text={intl.get('allocate_landed_coast')}
onClick={safeCallback(onAllocateLandedCost, original)}
/>
- }
- />
+
+ }
+ />
+
);
}
diff --git a/src/containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadeActionsBar.js b/src/containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadeActionsBar.js
index b3c8776c0..069833b27 100644
--- a/src/containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadeActionsBar.js
+++ b/src/containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadeActionsBar.js
@@ -14,6 +14,7 @@ import { useHistory } from 'react-router-dom';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import {
If,
+ Can,
FormattedMessage as T,
DashboardActionViewsList,
DashboardFilterButton,
@@ -29,6 +30,10 @@ import withSettings from 'containers/Settings/withSettings';
import { usePaymentMadesListContext } from './PaymentMadesListProvider';
import { useRefreshPaymentMades } from 'hooks/query/paymentMades';
+import {
+ Payment_Made_Abilities,
+ AbilitySubject,
+} from '../../../../common/abilityOption';
import { compose } from 'utils';
@@ -70,7 +75,7 @@ function PaymentMadeActionsBar({
const handleRefreshBtnClick = () => {
refresh();
};
-
+
// Handle table row size change.
const handleTableRowSizeChange = (size) => {
addSetting('billPayments', 'tableSize', size);
@@ -85,12 +90,14 @@ function PaymentMadeActionsBar({
onChange={handleTabChange}
/>
- }
- text={}
- onClick={handleClickNewPaymentMade}
- />
+
+ }
+ text={}
+ onClick={handleClickNewPaymentMade}
+ />
+
-
- }
- text={intl.get('edit_payment_made')}
- onClick={safeCallback(onEdit, original)}
- />
- }
- />
+
+
+
+ }
+ text={intl.get('edit_payment_made')}
+ onClick={safeCallback(onEdit, original)}
+ />
+
+
+ }
+ />
+
);
}
From 6ec86d3cf70a35ba9f3eeb7a42c193d336d4c8fa Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 21:26:34 +0200
Subject: [PATCH 09/18] feat: add customer & vendor ability.
---
.../CustomersLanding/CustomersActionsBar.js | 35 +++++---
.../Customers/CustomersLanding/components.js | 69 ++++++++------
.../CustomerDetailsActionsBar.js | 90 ++++++++++++-------
.../VendorDetailsActionsBar.js | 66 ++++++++------
src/containers/Items/components.js | 5 +-
.../VendorsLanding/VendorActionsBar.js | 22 +++--
.../Vendors/VendorsLanding/components.js | 68 ++++++++------
7 files changed, 214 insertions(+), 141 deletions(-)
diff --git a/src/containers/Customers/CustomersLanding/CustomersActionsBar.js b/src/containers/Customers/CustomersLanding/CustomersActionsBar.js
index 8ca0e6750..8cc194533 100644
--- a/src/containers/Customers/CustomersLanding/CustomersActionsBar.js
+++ b/src/containers/Customers/CustomersLanding/CustomersActionsBar.js
@@ -14,6 +14,7 @@ import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import {
If,
Icon,
+ Can,
FormattedMessage as T,
DashboardActionViewsList,
AdvancedFilterPopover,
@@ -29,6 +30,10 @@ import withCustomersActions from './withCustomersActions';
import withAlertActions from 'containers/Alert/withAlertActions';
import withSettingsActions from '../../Settings/withSettingsActions';
import withSettings from '../../Settings/withSettings';
+import {
+ Customer_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { compose } from 'utils';
@@ -103,15 +108,15 @@ function CustomerActionsBar({
onChange={handleTabChange}
/>
-
- }
- text={}
- onClick={onClickNewCustomer}
- />
-
-
+
+ }
+ text={}
+ onClick={onClickNewCustomer}
+ />
+
+
- }
- defaultChecked={accountsInactiveMode}
- onChange={handleInactiveSwitchChange}
- />
+
+ }
+ defaultChecked={accountsInactiveMode}
+ onChange={handleInactiveSwitchChange}
+ />
+
-
- }
- text={intl.get('edit_customer')}
- onClick={safeCallback(onEdit, original)}
- />
- }
- text={intl.get('duplicate')}
- onClick={safeCallback(onDuplicate, original)}
- />
-
+
+
+
}
- onClick={safeCallback(onInactivate, original)}
+ icon={}
+ text={intl.get('edit_customer')}
+ onClick={safeCallback(onEdit, original)}
/>
-
-
+
+
}
- onClick={safeCallback(onActivate, original)}
+ icon={}
+ text={intl.get('duplicate')}
+ onClick={safeCallback(onDuplicate, original)}
/>
-
- }
- text={intl.get('delete_customer')}
- intent={Intent.DANGER}
- onClick={safeCallback(onDelete, original)}
- />
+
+
+
+ }
+ onClick={safeCallback(onInactivate, original)}
+ />
+
+
+ }
+ onClick={safeCallback(onActivate, original)}
+ />
+
+
+
+ }
+ text={intl.get('delete_customer')}
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDelete, original)}
+ />
+
);
}
diff --git a/src/containers/Drawers/CustomerDetailsDrawer/CustomerDetailsActionsBar.js b/src/containers/Drawers/CustomerDetailsDrawer/CustomerDetailsActionsBar.js
index 504d3f366..f6cade1da 100644
--- a/src/containers/Drawers/CustomerDetailsDrawer/CustomerDetailsActionsBar.js
+++ b/src/containers/Drawers/CustomerDetailsDrawer/CustomerDetailsActionsBar.js
@@ -21,8 +21,15 @@ import { useCustomerDetailsDrawerContext } from './CustomerDetailsDrawerProvider
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
-import { Icon, FormattedMessage as T } from 'components';
-
+import { Can, Icon, FormattedMessage as T } from 'components';
+import {
+ AbilitySubject,
+ Invoice_Abilities,
+ Estimate_Abilities,
+ Receipt_Abilities,
+ Payment_Receive_Abilities,
+ Customer_Abilities,
+} from '../../../common/abilityOption';
import { compose } from 'utils';
/**
@@ -62,7 +69,7 @@ function CustomerDetailsActionsBar({
const handleDeleteCustomer = () => {
openAlert(`customer-delete`, { contactId: customerId });
};
-
+
const handleEditContact = () => {
history.push(`/customers/${customerId}/edit`);
closeDrawer('customer-details-drawer');
@@ -74,22 +81,34 @@ function CustomerDetailsActionsBar({
- }
- onClick={handleNewInvoiceClick}
- />
- }
- onClick={handleNewEstimateClick}
- />
- }
- onClick={handleNewReceiptClick}
- />
- }
- onClick={handleNewPaymentClick}
- />
+
+ }
+ onClick={handleNewInvoiceClick}
+ />
+
+
+ }
+ onClick={handleNewEstimateClick}
+ />
+
+
+ }
+ onClick={handleNewReceiptClick}
+ />
+
+
+
+ }
+ onClick={handleNewPaymentClick}
+ />
+
}
minimal={true}
@@ -104,21 +123,24 @@ function CustomerDetailsActionsBar({
-
- }
- text={intl.get('customer.drawer.action.edit')}
- onClick={handleEditContact}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteCustomer}
- />
+
+ }
+ text={intl.get('customer.drawer.action.edit')}
+ onClick={handleEditContact}
+ />
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteCustomer}
+ />
+
);
diff --git a/src/containers/Drawers/VendorDetailsDrawer/VendorDetailsActionsBar.js b/src/containers/Drawers/VendorDetailsDrawer/VendorDetailsActionsBar.js
index 5ed4a1c28..c488f457e 100644
--- a/src/containers/Drawers/VendorDetailsDrawer/VendorDetailsActionsBar.js
+++ b/src/containers/Drawers/VendorDetailsDrawer/VendorDetailsActionsBar.js
@@ -20,8 +20,13 @@ import { useVendorDetailsDrawerContext } from './VendorDetailsDrawerProvider';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
-import { Icon, FormattedMessage as T } from 'components';
-
+import { Can, Icon, FormattedMessage as T } from 'components';
+import {
+ AbilitySubject,
+ Invoice_Abilities,
+ Payment_Made_Abilities,
+ Vendor_Abilities,
+} from '../../../common/abilityOption';
import { safeCallback, compose } from 'utils';
/**
@@ -64,14 +69,21 @@ function VendorDetailsActionsBar({
- }
- onClick={handleNewInvoiceClick}
- />
- }
- onClick={handleNewPaymentClick}
- />
+
+ }
+ onClick={handleNewInvoiceClick}
+ />
+
+
+ }
+ onClick={handleNewPaymentClick}
+ />
+
}
minimal={true}
@@ -84,23 +96,25 @@ function VendorDetailsActionsBar({
icon={}
/>
-
-
- }
- text={}
- onClick={safeCallback(onEditContact)}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={safeCallback(onDeleteContact)}
- />
+
+ }
+ text={}
+ onClick={safeCallback(onEditContact)}
+ />
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDeleteContact)}
+ />
+
);
diff --git a/src/containers/Items/components.js b/src/containers/Items/components.js
index dd26ba711..3e3a8840c 100644
--- a/src/containers/Items/components.js
+++ b/src/containers/Items/components.js
@@ -110,7 +110,7 @@ export function ItemsActionMenuList({
onClick={safeCallback(onDuplicate, original)}
/>
-
+
-
-
+
- }
- text={}
- onClick={onClickNewVendor}
- />
-
+
+ }
+ text={}
+ onClick={onClickNewVendor}
+ />
+
+
-
- }
- text={intl.get('edit_vendor')}
- onClick={safeCallback(onEdit, original)}
- />
- }
- text={intl.get('duplicate')}
- onClick={safeCallback(onDuplicate, original)}
- />
-
+
+
}
- onClick={safeCallback(onInactivate, original)}
+ icon={}
+ text={intl.get('edit_vendor')}
+ onClick={safeCallback(onEdit, original)}
/>
-
-
+
+
}
- onClick={safeCallback(onActivate, original)}
+ icon={}
+ text={intl.get('duplicate')}
+ onClick={safeCallback(onDuplicate, original)}
/>
-
- }
- text={intl.get('delete_vendor')}
- intent={Intent.DANGER}
- onClick={safeCallback(onDelete, original)}
- />
+
+
+
+ }
+ onClick={safeCallback(onInactivate, original)}
+ />
+
+
+ }
+ onClick={safeCallback(onActivate, original)}
+ />
+
+
+
+ }
+ text={intl.get('delete_vendor')}
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDelete, original)}
+ />
+
);
}
From 7393d68b7a9a82f798e0dde29a87dc7daf2dc72c Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 21:42:16 +0200
Subject: [PATCH 10/18] feat: add account ability.
---
src/containers/Accounts/AccountsActionsBar.js | 30 +++++----
src/containers/Accounts/components.js | 66 +++++++++++--------
.../AccountDrawer/AccountDrawerActionBar.js | 51 ++++++++------
3 files changed, 85 insertions(+), 62 deletions(-)
diff --git a/src/containers/Accounts/AccountsActionsBar.js b/src/containers/Accounts/AccountsActionsBar.js
index e96d69c8a..001fb64bf 100644
--- a/src/containers/Accounts/AccountsActionsBar.js
+++ b/src/containers/Accounts/AccountsActionsBar.js
@@ -15,6 +15,7 @@ import { FormattedMessage as T } from 'components';
import {
AdvancedFilterPopover,
If,
+ Can,
DashboardActionViewsList,
DashboardFilterButton,
DashboardRowsHeightButton,
@@ -30,6 +31,8 @@ import withAlertActions from 'containers/Alert/withAlertActions';
import withAccountsTableActions from './withAccountsTableActions';
import withSettings from '../Settings/withSettings';
import withSettingsActions from '../Settings/withSettingsActions';
+import { Account_Abilities, AbilitySubject } from '../../common/abilityOption';
+
import { compose } from 'utils';
/**
@@ -116,13 +119,14 @@ function AccountsActionsBar({
onChange={handleTabChange}
/>
-
- }
- text={}
- onClick={onClickNewAccount}
- />
+
+ }
+ text={}
+ onClick={onClickNewAccount}
+ />
+
- }
- defaultChecked={accountsInactiveMode}
- onChange={handleInactiveSwitchChange}
- />
+
+ }
+ defaultChecked={accountsInactiveMode}
+ onChange={handleInactiveSwitchChange}
+ />
+
-
- }
- text={intl.get('edit_account')}
- onClick={safeCallback(onEdit, original)}
- />
- }
- text={intl.get('new_child_account')}
- onClick={safeCallback(onNewChild, original)}
- />
-
-
+
+
}
- onClick={safeCallback(onInactivate, original)}
+ icon={}
+ text={intl.get('edit_account')}
+ onClick={safeCallback(onEdit, original)}
/>
-
-
+
}
- onClick={safeCallback(onActivate, original)}
+ icon={}
+ text={intl.get('new_child_account')}
+ onClick={safeCallback(onNewChild, original)}
/>
-
- }
- intent={Intent.DANGER}
- onClick={safeCallback(onDelete, original)}
- />
+
+
+
+
+ }
+ onClick={safeCallback(onInactivate, original)}
+ />
+
+
+ }
+ onClick={safeCallback(onActivate, original)}
+ />
+
+
+
+ }
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDelete, original)}
+ />
+
);
}
diff --git a/src/containers/Drawers/AccountDrawer/AccountDrawerActionBar.js b/src/containers/Drawers/AccountDrawer/AccountDrawerActionBar.js
index cd4f11d90..9e18120b3 100644
--- a/src/containers/Drawers/AccountDrawer/AccountDrawerActionBar.js
+++ b/src/containers/Drawers/AccountDrawer/AccountDrawerActionBar.js
@@ -7,13 +7,17 @@ import {
Intent,
NavbarDivider,
} from '@blueprintjs/core';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import withDialogActions from 'containers/Dialog/withDialogActions';
import withAlertsActions from 'containers/Alert/withAlertActions';
import { safeCallback } from 'utils';
+import {
+ Account_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { compose } from 'utils';
import { useAccountDrawerContext } from './AccountDrawerProvider';
@@ -53,26 +57,31 @@ function AccountDrawerActionBar({
return (
- }
- text={}
- onClick={safeCallback(onEditAccount)}
- />
- }
- text={}
- onClick={safeCallback(onNewChildAccount)}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={safeCallback(onDeleteAccount)}
- />
+
+ }
+ text={}
+ onClick={safeCallback(onEditAccount)}
+ />
+
+ }
+ text={}
+ onClick={safeCallback(onNewChildAccount)}
+ />
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDeleteAccount)}
+ />
+
);
From 3db52e9c638df69dd7b809a798bf30d9681c29d8 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 21:56:36 +0200
Subject: [PATCH 11/18] feat: add manual journal ability.
---
.../ManualJournalActionsBar.js | 25 +++++----
.../Accounting/JournalsLanding/components.js | 53 ++++++++++++-------
.../ManualJournalDrawerActionBar.js | 44 +++++++++------
3 files changed, 79 insertions(+), 43 deletions(-)
diff --git a/src/containers/Accounting/JournalsLanding/ManualJournalActionsBar.js b/src/containers/Accounting/JournalsLanding/ManualJournalActionsBar.js
index a3f65be13..483c0457c 100644
--- a/src/containers/Accounting/JournalsLanding/ManualJournalActionsBar.js
+++ b/src/containers/Accounting/JournalsLanding/ManualJournalActionsBar.js
@@ -26,8 +26,11 @@ import withManualJournals from './withManualJournals';
import withSettingsActions from '../../Settings/withSettingsActions';
import withSettings from '../../Settings/withSettings';
-import { If, DashboardActionViewsList } from 'components';
-
+import { Can, If, DashboardActionViewsList } from 'components';
+import {
+ Manual_Journal_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { compose } from 'utils';
/**
@@ -86,13 +89,17 @@ function ManualJournalActionsBar({
onChange={handleTabChange}
/>
-
- }
- text={}
- onClick={onClickNewManualJournal}
- />
+
+ }
+ text={}
+ onClick={onClickNewManualJournal}
+ />
+
-
-
+
+
+
+ }
+ text={intl.get('publish_journal')}
+ onClick={safeCallback(onPublish, original)}
+ />
+
+
+
}
- text={intl.get('publish_journal')}
- onClick={safeCallback(onPublish, original)}
+ icon={}
+ text={intl.get('edit_journal')}
+ onClick={safeCallback(onEdit, original)}
/>
-
- }
- text={intl.get('edit_journal')}
- onClick={safeCallback(onEdit, original)}
- />
- }
- intent={Intent.DANGER}
- onClick={safeCallback(onDelete, original)}
- />
+
+
+ }
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDelete, original)}
+ />
+
);
};
diff --git a/src/containers/Drawers/ManualJournalDrawer/ManualJournalDrawerActionBar.js b/src/containers/Drawers/ManualJournalDrawer/ManualJournalDrawerActionBar.js
index f8c5fb1b6..0c184af49 100644
--- a/src/containers/Drawers/ManualJournalDrawer/ManualJournalDrawerActionBar.js
+++ b/src/containers/Drawers/ManualJournalDrawer/ManualJournalDrawerActionBar.js
@@ -8,14 +8,19 @@ import {
Intent,
NavbarDivider,
} from '@blueprintjs/core';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
-import { compose } from 'utils';
import { useManualJournalDrawerContext } from './ManualJournalDrawerProvider';
+import {
+ Manual_Journal_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
+
+import { compose } from 'utils';
/**
* Manual journal action bar.
@@ -44,20 +49,27 @@ function ManualJournalDrawerActionBar({
return (
- }
- text={}
- onClick={handleEditManualJournal}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteManualJournal}
- />
+
+ }
+ text={}
+ onClick={handleEditManualJournal}
+ />
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteManualJournal}
+ />
+
);
From 719302b241b11946206bd03688c97804dbc97dd4 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 22:15:02 +0200
Subject: [PATCH 12/18] feat: add expense ability.
---
src/common/abilityOption.js | 59 +++++++++++++++----
src/components/Can.js | 21 ++++---
.../ExpenseDrawer/ExpenseDrawerActionBar.js | 39 +++++++-----
.../ExpensesLanding/ExpenseActionsBar.js | 20 ++++---
.../Expenses/ExpensesLanding/components.js | 46 +++++++++------
5 files changed, 123 insertions(+), 62 deletions(-)
diff --git a/src/common/abilityOption.js b/src/common/abilityOption.js
index 757e36c1f..44771dfb2 100644
--- a/src/common/abilityOption.js
+++ b/src/common/abilityOption.js
@@ -1,14 +1,19 @@
export const AbilitySubject = {
Item: 'Item',
- Inventory_Adjustment: 'Inventory_Adjustment',
- Estimate: 'Estimate',
- Invoice: 'Invoice',
- Receipt: 'Receipt',
+ Inventory_Adjustment: 'InventoryAdjustment',
+ Estimate: 'SaleEstimate',
+ Invoice: 'SaleInvoice',
+ Receipt: 'SaleReceipt',
PaymentReceive: 'PaymentReceive',
Bill: 'Bill',
PaymentMade: 'PaymentMade',
Customer: 'Customer',
Vendor: 'Vendor',
+ Account: 'Account',
+ ManualJournal: 'ManualJournal',
+ Expense: 'Expense',
+ Cashflow: 'Cashflow',
+ Report: 'Report',
};
export const Item_Abilities = {
@@ -24,14 +29,14 @@ export const Inventory_Adjustment_Abilities = {
Delete: 'delete',
};
-export const SaleEstimate = {
+export const Estimate_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
Delete: 'delete',
};
-export const SaleInvoice = {
+export const Invoice_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
@@ -39,42 +44,72 @@ export const SaleInvoice = {
BadDebt: 'bad-debt',
};
-export const SaleReceipt = {
+export const Receipt_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
Delete: 'delete',
};
-export const PaymentReceive = {
+export const Payment_Receive_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
Delete: 'delete',
};
-export const Bill = {
+export const Bill_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
Delete: 'delete',
};
-export const PaymentMade = {
+export const Payment_Made_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
Delete: 'delete',
};
-export const CustomerAbilities = {
+
+export const Customer_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
Delete: 'delete',
};
-export const VendorAbilities = {
+
+export const Vendor_Abilities = {
View: 'view',
Create: 'create',
Edit: 'edit',
Delete: 'delete',
};
+
+export const Account_Abilities = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+ TransactionsLocking: 'TransactionsLocking',
+};
+
+export const Manual_Journal_Abilities = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+
+export const Expense_Abilities = {
+ View: 'view',
+ Create: 'create',
+ Edit: 'edit',
+ Delete: 'delete',
+};
+
+export const Cashflow__Abilities = {
+ View: 'view',
+ Create: 'create',
+ Delete: 'delete',
+};
diff --git a/src/components/Can.js b/src/components/Can.js
index 355e1610e..a24a8d1f4 100644
--- a/src/components/Can.js
+++ b/src/components/Can.js
@@ -6,12 +6,15 @@ import {
Item_Abilities,
AbilitySubject,
Inventory_Adjustment_Abilities,
- SaleEstimate,
- SaleInvoice,
- SaleReceipt,
+ Estimate_Abilities,
+ Invoice_Abilities,
+ Receipt_Abilities,
PaymentReceive,
- Bill,
- PaymentMade,
+ Bill_Abilities,
+ Payment_Made_Abilities,
+ Customer_Abilities,
+ Vendor_Abilities,
+ Account_Abilities,
} from '../common/abilityOption';
export const AbilityContext = React.createContext();
@@ -20,12 +23,12 @@ export const Can = createContextualCan(AbilityContext.Consumer);
const AbilityContextProvider = (props) => {
const ability = new Ability([
{
- subject: [AbilitySubject.PaymentMade],
- action: [PaymentMade.Edit],
+ subject: [AbilitySubject.Account],
+ action: [Account_Abilities.Create],
},
{
- subject: [AbilitySubject.Bill],
- action: [Bill.Create],
+ subject: [AbilitySubject.Invoice],
+ action: [],
},
]);
diff --git a/src/containers/Drawers/ExpenseDrawer/ExpenseDrawerActionBar.js b/src/containers/Drawers/ExpenseDrawer/ExpenseDrawerActionBar.js
index f4472c86c..caea9001d 100644
--- a/src/containers/Drawers/ExpenseDrawer/ExpenseDrawerActionBar.js
+++ b/src/containers/Drawers/ExpenseDrawer/ExpenseDrawerActionBar.js
@@ -8,8 +8,11 @@ import {
Intent,
NavbarDivider,
} from '@blueprintjs/core';
-import { FormattedMessage as T } from 'components';
-
+import { Can, FormattedMessage as T } from 'components';
+import {
+ Expense_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDrawerActions from 'containers/Drawer/withDrawerActions';
@@ -44,20 +47,24 @@ function ExpenseDrawerActionBar({
return (
- }
- text={}
- onClick={handleEditExpense}
- />
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteExpense}
- />
+
+ }
+ text={}
+ onClick={handleEditExpense}
+ />
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteExpense}
+ />
+
);
diff --git a/src/containers/Expenses/ExpensesLanding/ExpenseActionsBar.js b/src/containers/Expenses/ExpensesLanding/ExpenseActionsBar.js
index 6b4e59ec5..6f564a22b 100644
--- a/src/containers/Expenses/ExpensesLanding/ExpenseActionsBar.js
+++ b/src/containers/Expenses/ExpensesLanding/ExpenseActionsBar.js
@@ -15,6 +15,7 @@ import withDialogActions from 'containers/Dialog/withDialogActions';
import {
If,
+ Can,
DashboardRowsHeightButton,
DashboardActionViewsList,
DashboardFilterButton,
@@ -22,6 +23,10 @@ import {
FormattedMessage as T,
} from 'components';
+import {
+ Expense_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import { useRefreshExpenses } from 'hooks/query/expenses';
import { useExpensesListContext } from './ExpensesListProvider';
@@ -92,13 +97,14 @@ function ExpensesActionsBar({
onChange={handleTabChange}
/>
-
- }
- text={}
- onClick={onClickNewExpense}
- />
+
+ }
+ text={}
+ onClick={onClickNewExpense}
+ />
+
-
-
+
+
+
+ }
+ text={intl.get('publish_expense')}
+ onClick={safeCallback(onPublish, original)}
+ />
+
+
+
}
- text={intl.get('publish_expense')}
- onClick={safeCallback(onPublish, original)}
+ icon={}
+ text={intl.get('edit_expense')}
+ onClick={safeCallback(onEdit, original)}
/>
-
- }
- text={intl.get('edit_expense')}
- onClick={safeCallback(onEdit, original)}
- />
- }
- text={intl.get('delete_expense')}
- intent={Intent.DANGER}
- onClick={safeCallback(onDelete, original)}
- />
+
+
+ }
+ text={intl.get('delete_expense')}
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDelete, original)}
+ />
+
);
}
From cc1f4cc26b9e15e3753432433e5b2a5539db40b8 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Tue, 23 Nov 2021 22:38:16 +0200
Subject: [PATCH 13/18] feat: ability option.
---
src/common/abilityOption.js | 24 ++++++++++++++++++++--
src/config/financialReportsMenu.js | 33 ++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 2 deletions(-)
diff --git a/src/common/abilityOption.js b/src/common/abilityOption.js
index 44771dfb2..e1db1296a 100644
--- a/src/common/abilityOption.js
+++ b/src/common/abilityOption.js
@@ -91,7 +91,7 @@ export const Account_Abilities = {
Create: 'create',
Edit: 'edit',
Delete: 'delete',
- TransactionsLocking: 'TransactionsLocking',
+ Transactions_Locking: 'TransactionsLocking',
};
export const Manual_Journal_Abilities = {
@@ -108,8 +108,28 @@ export const Expense_Abilities = {
Delete: 'delete',
};
-export const Cashflow__Abilities = {
+export const Cashflow_Abilities = {
View: 'view',
Create: 'create',
Delete: 'delete',
};
+
+export const Report_Abilities = {
+ READ_BALANCE_SHEET = 'read-balance-sheet',
+ READ_TRIAL_BALANCE_SHEET = 'read-trial-balance-sheet',
+ READ_PROFIT_LOSS = 'read-profit-loss',
+ READ_JOURNAL = 'read-journal',
+ READ_GENERAL_LEDGET = 'read-general-ledger',
+ READ_CASHFLOW = 'read-cashflow',
+ READ_AR_AGING_SUMMARY = 'read-ar-aging-summary',
+ READ_AP_AGING_SUMMARY = 'read-ap-aging-summary',
+ READ_PURCHASES_BY_ITEMS = 'read-purchases-by-items',
+ READ_SALES_BY_ITEMS = 'read-sales-by-items',
+ READ_CUSTOMERS_TRANSACTIONS = 'read-customers-transactions',
+ READ_VENDORS_TRANSACTIONS = 'read-vendors-transactions',
+ READ_CUSTOMERS_SUMMARY_BALANCE = 'read-customers-summary-balance',
+ READ_VENDORS_SUMMARY_BALANCE = 'read-vendors-summary-balance',
+ READ_INVENTORY_VALUATION_SUMMARY = 'read-inventory-valuation-summary',
+ READ_INVENTORY_ITEM_DETAILS = 'read-inventory-item-details',
+ READ_CASHFLOW_ACCOUNT_TRANSACTION = 'read-cashflow-account-transactions'
+};
diff --git a/src/config/financialReportsMenu.js b/src/config/financialReportsMenu.js
index 4c3226a4f..714049581 100644
--- a/src/config/financialReportsMenu.js
+++ b/src/config/financialReportsMenu.js
@@ -1,5 +1,6 @@
import React from 'react';
import { FormattedMessage as T } from 'components';
+import { Report_Abilities, AbilitySubject } from '../common/abilityOption';
export const financialReportMenus = [
{
@@ -11,6 +12,8 @@ export const financialReportMenus = [
),
link: '/financial-reports/balance-sheet',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_BALANCE_SHEET,
},
{
title: ,
@@ -18,11 +21,15 @@ export const financialReportMenus = [
),
link: '/financial-reports/trial-balance-sheet',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_TRIAL_BALANCE_SHEET,
},
{
title: ,
desc: ,
link: '/financial-reports/profit-loss-sheet',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_PROFIT_LOSS,
},
{
title: ,
@@ -30,16 +37,22 @@ export const financialReportMenus = [
),
link: '/financial-reports/cash-flow',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_CASHFLOW,
},
{
title: ,
desc: ,
link: '/financial-reports/journal-sheet',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_JOURNAL,
},
{
title: ,
desc: ,
link: '/financial-reports/general-ledger',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_GENERAL_LEDGET,
},
{
title: ,
@@ -47,11 +60,15 @@ export const financialReportMenus = [
),
link: '/financial-reports/receivable-aging-summary',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_AR_AGING_SUMMARY,
},
{
title: ,
desc: ,
link: '/financial-reports/payable-aging-summary',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_AP_AGING_SUMMARY,
},
],
},
@@ -71,6 +88,8 @@ export const SalesAndPurchasesReportMenus = [
/>
),
link: '/financial-reports/purchases-by-items',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_PURCHASES_BY_ITEMS,
},
{
title: ,
@@ -82,6 +101,8 @@ export const SalesAndPurchasesReportMenus = [
/>
),
link: '/financial-reports/sales-by-items',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_SALES_BY_ITEMS,
},
{
title: ,
@@ -93,6 +114,8 @@ export const SalesAndPurchasesReportMenus = [
/>
),
link: '/financial-reports/inventory-valuation',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_INVENTORY_VALUATION_SUMMARY,
},
{
title: ,
@@ -104,6 +127,8 @@ export const SalesAndPurchasesReportMenus = [
/>
),
link: '/financial-reports/customers-balance-summary',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_CUSTOMERS_SUMMARY_BALANCE,
},
{
title: ,
@@ -111,6 +136,8 @@ export const SalesAndPurchasesReportMenus = [
),
link: '/financial-reports/vendors-balance-summary',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_VENDORS_SUMMARY_BALANCE,
},
{
title: ,
@@ -120,6 +147,8 @@ export const SalesAndPurchasesReportMenus = [
/>
),
link: '/financial-reports/transactions-by-customers',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_CUSTOMERS_TRANSACTIONS,
},
{
title: ,
@@ -131,6 +160,8 @@ export const SalesAndPurchasesReportMenus = [
/>
),
link: '/financial-reports/transactions-by-vendors',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_VENDORS_TRANSACTIONS,
},
{
title: ,
@@ -138,6 +169,8 @@ export const SalesAndPurchasesReportMenus = [
),
link: '/financial-reports/inventory-item-details',
+ subject: AbilitySubject.Report,
+ ability: Report_Abilities.READ_INVENTORY_ITEM_DETAILS,
},
],
},
From aef8eb79071cb2e3e8db57234f270e023d21a557 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Wed, 24 Nov 2021 11:47:18 +0200
Subject: [PATCH 14/18] feat: empty status ability.
---
.../ManualJournalsEmptyStatus.js | 33 +++++++++++------
.../CustomersLanding/CustomersEmptyStatus.js | 32 +++++++++-------
.../ExpensesLanding/ExpensesEmptyStatus.js | 32 +++++++++-------
src/containers/Items/ItemsEmptyStatus.js | 29 ++++++++-------
.../Bills/BillsLanding/BillsEmptyStatus.js | 32 +++++++++-------
.../PaymentMadesEmptyStatus.js | 32 +++++++++-------
.../EstimatesLanding/EstimatesEmptyStatus.js | 32 +++++++++-------
.../InvoicesLanding/InvoicesEmptyStatus.js | 33 ++++++++++-------
.../PaymentReceivesEmptyStatus.js | 37 ++++++++++++-------
.../ReceiptsLanding/ReceiptsEmptyStatus.js | 32 +++++++++-------
.../VendorsLanding/VendorsEmptyStatus.js | 32 +++++++++-------
11 files changed, 213 insertions(+), 143 deletions(-)
diff --git a/src/containers/Accounting/JournalsLanding/ManualJournalsEmptyStatus.js b/src/containers/Accounting/JournalsLanding/ManualJournalsEmptyStatus.js
index 105b5c62d..9317def42 100644
--- a/src/containers/Accounting/JournalsLanding/ManualJournalsEmptyStatus.js
+++ b/src/containers/Accounting/JournalsLanding/ManualJournalsEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ AbilitySubject,
+ Manual_Journal_Abilities,
+} from '../../../common/abilityOption';
export default function ManualJournalsEmptyStatus() {
const history = useHistory();
@@ -17,19 +21,24 @@ export default function ManualJournalsEmptyStatus() {
}
action={
<>
- {
- history.push('/make-journal-entry');
- }}
+
-
-
+ {
+ history.push('/make-journal-entry');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
diff --git a/src/containers/Customers/CustomersLanding/CustomersEmptyStatus.js b/src/containers/Customers/CustomersLanding/CustomersEmptyStatus.js
index 6ef1d135e..d91a3c043 100644
--- a/src/containers/Customers/CustomersLanding/CustomersEmptyStatus.js
+++ b/src/containers/Customers/CustomersLanding/CustomersEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ AbilitySubject,
+ Customer_Abilities,
+} from '../../../common/abilityOption';
export default function CustomersEmptyStatus() {
const history = useHistory();
@@ -17,19 +21,21 @@ export default function CustomersEmptyStatus() {
}
action={
<>
- {
- history.push('/customers/new');
- }}
- >
-
-
+
+ {
+ history.push('/customers/new');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
diff --git a/src/containers/Expenses/ExpensesLanding/ExpensesEmptyStatus.js b/src/containers/Expenses/ExpensesLanding/ExpensesEmptyStatus.js
index 84ed56b0e..abfc31ada 100644
--- a/src/containers/Expenses/ExpensesLanding/ExpensesEmptyStatus.js
+++ b/src/containers/Expenses/ExpensesLanding/ExpensesEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ AbilitySubject,
+ Expense_Abilities,
+} from '../../../common/abilityOption';
export default function InvoicesEmptyStatus() {
const history = useHistory();
@@ -17,19 +21,21 @@ export default function InvoicesEmptyStatus() {
}
action={
<>
- {
- history.push('/expenses/new');
- }}
- >
-
-
+
+ {
+ history.push('/expenses/new');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
diff --git a/src/containers/Items/ItemsEmptyStatus.js b/src/containers/Items/ItemsEmptyStatus.js
index 3a0c53fe3..ba018c705 100644
--- a/src/containers/Items/ItemsEmptyStatus.js
+++ b/src/containers/Items/ItemsEmptyStatus.js
@@ -2,7 +2,8 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import { Item_Abilities, AbilitySubject } from '../../common/abilityOption';
export default function ItemsEmptyStatus() {
const history = useHistory();
@@ -17,19 +18,21 @@ export default function ItemsEmptyStatus() {
}
action={
<>
- {
- history.push('/items/new');
- }}
- >
-
-
+
+ {
+ history.push('/items/new');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
diff --git a/src/containers/Purchases/Bills/BillsLanding/BillsEmptyStatus.js b/src/containers/Purchases/Bills/BillsLanding/BillsEmptyStatus.js
index cecfef2ad..674d228ee 100644
--- a/src/containers/Purchases/Bills/BillsLanding/BillsEmptyStatus.js
+++ b/src/containers/Purchases/Bills/BillsLanding/BillsEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ Bill_Abilities,
+ AbilitySubject,
+} from '../../../../common/abilityOption';
export default function BillsEmptyStatus() {
const history = useHistory();
@@ -17,19 +21,21 @@ export default function BillsEmptyStatus() {
}
action={
<>
- {
- history.push('/bills/new');
- }}
- >
-
-
+
+ {
+ history.push('/bills/new');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
diff --git a/src/containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadesEmptyStatus.js b/src/containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadesEmptyStatus.js
index ada8352ba..077c2d368 100644
--- a/src/containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadesEmptyStatus.js
+++ b/src/containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadesEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ Payment_Made_Abilities,
+ AbilitySubject,
+} from '../../../../common/abilityOption';
export default function PaymentMadesEmptyStatus() {
const history = useHistory();
@@ -17,19 +21,21 @@ export default function PaymentMadesEmptyStatus() {
}
action={
<>
- {
- history.push('/payment-mades/new');
- }}
- >
-
-
+
+ {
+ history.push('/payment-mades/new');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
diff --git a/src/containers/Sales/Estimates/EstimatesLanding/EstimatesEmptyStatus.js b/src/containers/Sales/Estimates/EstimatesLanding/EstimatesEmptyStatus.js
index c2e5e92fa..12669d3d6 100644
--- a/src/containers/Sales/Estimates/EstimatesLanding/EstimatesEmptyStatus.js
+++ b/src/containers/Sales/Estimates/EstimatesLanding/EstimatesEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ Estimate_Abilities,
+ AbilitySubject,
+} from '../../../../common/abilityOption';
export default function EstimatesEmptyStatus() {
const history = useHistory();
@@ -16,18 +20,20 @@ export default function EstimatesEmptyStatus() {
}
action={
<>
- {
- history.push('/estimates/new');
- }}
- >
-
-
-
-
-
+
+ {
+ history.push('/estimates/new');
+ }}
+ >
+
+
+
+
+
+
>
}
/>
diff --git a/src/containers/Sales/Invoices/InvoicesLanding/InvoicesEmptyStatus.js b/src/containers/Sales/Invoices/InvoicesLanding/InvoicesEmptyStatus.js
index 21212a4c2..268976c00 100644
--- a/src/containers/Sales/Invoices/InvoicesLanding/InvoicesEmptyStatus.js
+++ b/src/containers/Sales/Invoices/InvoicesLanding/InvoicesEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ Invoice_Abilities,
+ AbilitySubject,
+} from '../../../../common/abilityOption';
export default function EstimatesEmptyStatus() {
const history = useHistory();
@@ -17,19 +21,20 @@ export default function EstimatesEmptyStatus() {
}
action={
<>
- {
- history.push('/invoices/new');
- }}
- >
-
-
-
-
-
-
+
+ {
+ history.push('/invoices/new');
+ }}
+ >
+
+
+
+
+
+
>
}
/>
diff --git a/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesEmptyStatus.js b/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesEmptyStatus.js
index 6b0df1b31..876602f7d 100644
--- a/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesEmptyStatus.js
+++ b/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ Payment_Receive_Abilities,
+ AbilitySubject,
+} from '../../../../common/abilityOption';
export default function PaymentReceivesEmptyStatus() {
const history = useHistory();
@@ -12,24 +16,31 @@ export default function PaymentReceivesEmptyStatus() {
title={}
description={
-
+
}
action={
<>
- {
- history.push('/payment-receives/new');
- }}
+
-
-
+ {
+ history.push('/payment-receives/new');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
diff --git a/src/containers/Sales/Receipts/ReceiptsLanding/ReceiptsEmptyStatus.js b/src/containers/Sales/Receipts/ReceiptsLanding/ReceiptsEmptyStatus.js
index e029ddf9b..612179004 100644
--- a/src/containers/Sales/Receipts/ReceiptsLanding/ReceiptsEmptyStatus.js
+++ b/src/containers/Sales/Receipts/ReceiptsLanding/ReceiptsEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ Receipt_Abilities,
+ AbilitySubject,
+} from '../../../../common/abilityOption';
export default function ReceiptsEmptyStatus() {
const history = useHistory();
@@ -17,19 +21,21 @@ export default function ReceiptsEmptyStatus() {
}
action={
<>
- {
- history.push('/receipts/new');
- }}
- >
-
-
+
+ {
+ history.push('/receipts/new');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
diff --git a/src/containers/Vendors/VendorsLanding/VendorsEmptyStatus.js b/src/containers/Vendors/VendorsLanding/VendorsEmptyStatus.js
index 5ce0cdc33..192d2a80c 100644
--- a/src/containers/Vendors/VendorsLanding/VendorsEmptyStatus.js
+++ b/src/containers/Vendors/VendorsLanding/VendorsEmptyStatus.js
@@ -2,7 +2,11 @@ import React from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { EmptyStatus } from 'components';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
+import {
+ Vendor_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
export default function VendorsEmptyStatus() {
const history = useHistory();
@@ -17,19 +21,21 @@ export default function VendorsEmptyStatus() {
}
action={
<>
- {
- history.push('/vendors/new');
- }}
- >
-
-
+
+ {
+ history.push('/vendors/new');
+ }}
+ >
+
+
-
-
-
+
+
+
+
>
}
/>
From 553334f06324b73560f3aad14ddebb9f8a60d574 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Wed, 24 Nov 2021 14:09:24 +0200
Subject: [PATCH 15/18] feat: ability home page option.
---
src/common/homepageOptions.js | 75 +++++++++++++++++++++++++++++------
1 file changed, 63 insertions(+), 12 deletions(-)
diff --git a/src/common/homepageOptions.js b/src/common/homepageOptions.js
index 82972db3a..6f61b7172 100644
--- a/src/common/homepageOptions.js
+++ b/src/common/homepageOptions.js
@@ -1,5 +1,20 @@
import React from 'react';
import { FormattedMessage as T } from 'components';
+import {
+ Invoice_Abilities,
+ Estimate_Abilities,
+ AbilitySubject,
+ Receipt_Abilities,
+ Customer_Abilities,
+ Payment_Receive_Abilities,
+ Bill_Abilities,
+ Vendor_Abilities,
+ Payment_Made_Abilities,
+ Account_Abilities,
+ Manual_Journal_Abilities,
+ Expense_Abilities,
+ Item_Abilities,
+} from '../common/abilityOption';
export const accountsReceivable = [
{
@@ -9,21 +24,29 @@ export const accountsReceivable = [
title: ,
description: ,
link: '/invoices',
+ subject: AbilitySubject.Invoice,
+ ability: Invoice_Abilities.View,
},
{
title: ,
description: ,
link: '/estimates',
+ subject: AbilitySubject.Estimate,
+ ability: Estimate_Abilities.View,
},
{
title: ,
description: ,
link: '/receipts',
+ subject: AbilitySubject.Receipt,
+ ability: Receipt_Abilities.View,
},
{
title: ,
description: ,
link: '/customers',
+ subject: AbilitySubject.Customer,
+ ability: Customer_Abilities.View,
},
{
title: ,
@@ -31,6 +54,8 @@ export const accountsReceivable = [
),
link: '/payment-receives',
+ subject: AbilitySubject.PaymentReceive,
+ ability: Payment_Receive_Abilities.View,
},
],
},
@@ -46,6 +71,8 @@ export const accountsPayable = [
),
link: '/bills',
+ subject: AbilitySubject.Bill,
+ ability: Bill_Abilities.View,
},
{
title: ,
@@ -53,11 +80,15 @@ export const accountsPayable = [
),
link: '/vendors',
+ subject: AbilitySubject.Vendor,
+ ability: Vendor_Abilities.View,
},
{
title: ,
description: ,
link: '/payment-mades',
+ subject: AbilitySubject.PaymentMade,
+ ability: Payment_Made_Abilities.View,
},
],
},
@@ -77,20 +108,32 @@ export const financialAccounting = [
/>
),
link: '/accounts',
+ subject: AbilitySubject.Account,
+ ability: Account_Abilities.View,
},
{
- title: ,
- description:,
+ title: ,
+ description: (
+
+ ),
link: '/manual-journals',
+ subject: AbilitySubject.ManualJournal,
+ ability: Manual_Journal_Abilities.View,
},
{
- title: ,
- description:,
+ title: ,
+ description: (
+
+ ),
link: '/expenses',
+ subject: AbilitySubject.Expense,
+ ability: Expense_Abilities.View,
},
{
- title: ,
- description:,
+ title: ,
+ description: (
+
+ ),
link: '/financial-reports',
},
],
@@ -102,19 +145,27 @@ export const productsServices = [
sectionTitle: ,
shortcuts: [
{
- title: ,
- description:,
+ title: ,
+ description: (
+
+ ),
link: '/items',
+ subject: AbilitySubject.Item,
+ ability: Item_Abilities.View,
},
{
- title: ,
- description:,
+ title: ,
+ description: ,
link: 'items/categories',
},
{
- title: ,
- description: ,
+ title: ,
+ description: (
+
+ ),
link: '/inventory-adjustments',
+ subject: AbilitySubject.Inventory_Adjustment,
+ ability: Invoice_Abilities.View,
},
],
},
From 9ceee6d02ea6c689d02ce2cb6dfa597c8f8b61b5 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Wed, 24 Nov 2021 14:35:38 +0200
Subject: [PATCH 16/18] feat: reports abilities.
---
src/common/abilityOption.js | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/src/common/abilityOption.js b/src/common/abilityOption.js
index e1db1296a..9b140a5ff 100644
--- a/src/common/abilityOption.js
+++ b/src/common/abilityOption.js
@@ -115,21 +115,21 @@ export const Cashflow_Abilities = {
};
export const Report_Abilities = {
- READ_BALANCE_SHEET = 'read-balance-sheet',
- READ_TRIAL_BALANCE_SHEET = 'read-trial-balance-sheet',
- READ_PROFIT_LOSS = 'read-profit-loss',
- READ_JOURNAL = 'read-journal',
- READ_GENERAL_LEDGET = 'read-general-ledger',
- READ_CASHFLOW = 'read-cashflow',
- READ_AR_AGING_SUMMARY = 'read-ar-aging-summary',
- READ_AP_AGING_SUMMARY = 'read-ap-aging-summary',
- READ_PURCHASES_BY_ITEMS = 'read-purchases-by-items',
- READ_SALES_BY_ITEMS = 'read-sales-by-items',
- READ_CUSTOMERS_TRANSACTIONS = 'read-customers-transactions',
- READ_VENDORS_TRANSACTIONS = 'read-vendors-transactions',
- READ_CUSTOMERS_SUMMARY_BALANCE = 'read-customers-summary-balance',
- READ_VENDORS_SUMMARY_BALANCE = 'read-vendors-summary-balance',
- READ_INVENTORY_VALUATION_SUMMARY = 'read-inventory-valuation-summary',
- READ_INVENTORY_ITEM_DETAILS = 'read-inventory-item-details',
- READ_CASHFLOW_ACCOUNT_TRANSACTION = 'read-cashflow-account-transactions'
+ READ_BALANCE_SHEET: 'read-balance-sheet',
+ READ_TRIAL_BALANCE_SHEET: 'read-trial-balance-sheet',
+ READ_PROFIT_LOSS: 'read-profit-loss',
+ READ_JOURNAL: 'read-journal',
+ READ_GENERAL_LEDGET: 'read-general-ledger',
+ READ_CASHFLOW: 'read-cashflow',
+ READ_AR_AGING_SUMMARY: 'read-ar-aging-summary',
+ READ_AP_AGING_SUMMARY: 'read-ap-aging-summary',
+ READ_PURCHASES_BY_ITEMS: 'read-purchases-by-items',
+ READ_SALES_BY_ITEMS: 'read-sales-by-items',
+ READ_CUSTOMERS_TRANSACTIONS: 'read-customers-transactions',
+ READ_VENDORS_TRANSACTIONS: 'read-vendors-transactions',
+ READ_CUSTOMERS_SUMMARY_BALANCE: 'read-customers-summary-balance',
+ READ_VENDORS_SUMMARY_BALANCE: 'read-vendors-summary-balance',
+ READ_INVENTORY_VALUATION_SUMMARY: 'read-inventory-valuation-summary',
+ READ_INVENTORY_ITEM_DETAILS: 'read-inventory-item-details',
+ READ_CASHFLOW_ACCOUNT_TRANSACTION: 'read-cashflow-account-transactions',
};
From 2630e0235d921abcd5936ac5dd0175d25c17d13d Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Thu, 25 Nov 2021 13:02:09 +0200
Subject: [PATCH 17/18] feat: add cashflow & vendor ability.
---
.../AccountTransactions/components.js | 32 ++++---
.../CashFlowAccountsActionsBar.js | 49 ++++++----
.../CashFlowAccounts/CashflowAccountsGrid.js | 92 +++++++++++--------
.../CashflowTransactionDrawerActionBar.js | 31 ++++---
.../VendorsLanding/VendorActionsBar.js | 13 ++-
5 files changed, 127 insertions(+), 90 deletions(-)
diff --git a/src/containers/CashFlow/AccountTransactions/components.js b/src/containers/CashFlow/AccountTransactions/components.js
index 528d6afe2..78dae22d5 100644
--- a/src/containers/CashFlow/AccountTransactions/components.js
+++ b/src/containers/CashFlow/AccountTransactions/components.js
@@ -4,9 +4,13 @@ import intl from 'react-intl-universal';
import { Intent, Menu, MenuItem, MenuDivider } from '@blueprintjs/core';
import { MaterialProgressBar } from 'components';
-import { FormatDateCell, If, Icon } from 'components';
+import { Can, FormatDateCell, If, Icon } from 'components';
import { useAccountTransactionsContext } from './AccountTransactionsProvider';
import { TRANSACRIONS_TYPE } from 'common/cashflowOptions';
+import {
+ AbilitySubject,
+ Cashflow_Abilities,
+} from '../../../common/abilityOption';
import { safeCallback } from 'utils';
export function ActionsMenu({
@@ -20,15 +24,17 @@ export function ActionsMenu({
text={intl.get('view_details')}
onClick={safeCallback(onViewDetails, original)}
/>
-
-
- }
- />
-
+
+
+
+ }
+ />
+
+
);
}
@@ -83,7 +89,7 @@ export function useAccountTransactionsColumns() {
className: 'deposit',
textOverview: true,
align: 'right',
- clickable: true
+ clickable: true,
},
{
id: 'withdrawal',
@@ -93,7 +99,7 @@ export function useAccountTransactionsColumns() {
width: 150,
textOverview: true,
align: 'right',
- clickable: true
+ clickable: true,
},
{
id: 'running_balance',
@@ -103,7 +109,7 @@ export function useAccountTransactionsColumns() {
width: 150,
textOverview: true,
align: 'right',
- clickable: true
+ clickable: true,
},
{
id: 'balance',
diff --git a/src/containers/CashFlow/CashFlowAccounts/CashFlowAccountsActionsBar.js b/src/containers/CashFlow/CashFlowAccounts/CashFlowAccountsActionsBar.js
index cb9e86b84..68420cfb4 100644
--- a/src/containers/CashFlow/CashFlowAccounts/CashFlowAccountsActionsBar.js
+++ b/src/containers/CashFlow/CashFlowAccounts/CashFlowAccountsActionsBar.js
@@ -7,8 +7,12 @@ import {
Alignment,
Switch,
} from '@blueprintjs/core';
-import { Icon, FormattedMessage as T } from 'components';
+import { Can, Icon, FormattedMessage as T } from 'components';
import { useRefreshCashflowAccounts } from 'hooks/query';
+import {
+ Cashflow_Abilities,
+ AbilitySubject,
+} from '../../../common/abilityOption';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
@@ -56,19 +60,22 @@ function CashFlowAccountsActionsBar({
return (
- }
- text={}
- onClick={handleAddBankAccount}
- />
- }
- text={}
- onClick={handleAddCashAccount}
- />
-
+
+ }
+ text={}
+ onClick={handleAddBankAccount}
+ />
+
+ }
+ text={}
+ onClick={handleAddCashAccount}
+ />
+
+
}
@@ -85,13 +92,15 @@ function CashFlowAccountsActionsBar({
text={}
/>
-
- }
- defaultChecked={false}
- onChange={handleInactiveSwitchChange}
- />
+
+ }
+ defaultChecked={false}
+ onChange={handleInactiveSwitchChange}
+ />
+
+
-
- }
- icon={}
- >
-
-
-
- }
- icon={}
- >
-
-
-
-
- }
- text={intl.get('edit_account')}
- onClick={safeCallback(onEditClick)}
- />
-
-
+
+
}
- onClick={safeCallback(onInactivateClick)}
- />
-
-
+ text={}
+ icon={}
+ >
+
+
+
}
- onClick={safeCallback(onActivateClick)}
+ text={}
+ icon={}
+ >
+
+
+
+
+
+
+ }
+ text={intl.get('edit_account')}
+ onClick={safeCallback(onEditClick)}
/>
-
- }
- intent={Intent.DANGER}
- onClick={safeCallback(onDeleteClick)}
- />
+
+
+
+
+ }
+ onClick={safeCallback(onInactivateClick)}
+ />
+
+
+ }
+ onClick={safeCallback(onActivateClick)}
+ />
+
+
+
+ }
+ intent={Intent.DANGER}
+ onClick={safeCallback(onDeleteClick)}
+ />
+
);
}
diff --git a/src/containers/Drawers/CashflowTransactionDetailDrawer/CashflowTransactionDrawerActionBar.js b/src/containers/Drawers/CashflowTransactionDetailDrawer/CashflowTransactionDrawerActionBar.js
index 2099f063e..ea5902ec9 100644
--- a/src/containers/Drawers/CashflowTransactionDetailDrawer/CashflowTransactionDrawerActionBar.js
+++ b/src/containers/Drawers/CashflowTransactionDetailDrawer/CashflowTransactionDrawerActionBar.js
@@ -1,12 +1,15 @@
import React from 'react';
import Icon from 'components/Icon';
import { Button, Classes, NavbarGroup, Intent } from '@blueprintjs/core';
-import { FormattedMessage as T } from 'components';
+import { Can, FormattedMessage as T } from 'components';
import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
import { useCashflowTransactionDrawerContext } from './CashflowTransactionDrawerProvider';
import withAlertsActions from 'containers/Alert/withAlertActions';
-
+import {
+ AbilitySubject,
+ Cashflow_Abilities,
+} from '../../../common/abilityOption';
import { compose } from 'utils';
/**
@@ -24,17 +27,19 @@ function CashflowTransactionDrawerActionBar({
};
return (
-
-
- }
- text={}
- intent={Intent.DANGER}
- onClick={handleDeleteCashflowTransaction}
- />
-
-
+
+
+
+ }
+ text={}
+ intent={Intent.DANGER}
+ onClick={handleDeleteCashflowTransaction}
+ />
+
+
+
);
}
export default compose(withAlertsActions)(CashflowTransactionDrawerActionBar);
diff --git a/src/containers/Vendors/VendorsLanding/VendorActionsBar.js b/src/containers/Vendors/VendorsLanding/VendorActionsBar.js
index e5e5b2d6f..bcd20c9ab 100644
--- a/src/containers/Vendors/VendorsLanding/VendorActionsBar.js
+++ b/src/containers/Vendors/VendorsLanding/VendorActionsBar.js
@@ -142,12 +142,15 @@ function VendorActionsBar({
onChange={handleTableRowSizeChange}
/>
- }
- defaultChecked={vendorsInactiveMode}
- onChange={handleInactiveSwitchChange}
- />
+
+ }
+ defaultChecked={vendorsInactiveMode}
+ onChange={handleInactiveSwitchChange}
+ />
+
+
Date: Thu, 25 Nov 2021 14:36:34 +0200
Subject: [PATCH 18/18] feat: ability context.
---
src/hooks/utils/index.js | 5 ++---
src/hooks/utils/useAbilityContext.js | 6 ++++++
2 files changed, 8 insertions(+), 3 deletions(-)
create mode 100644 src/hooks/utils/useAbilityContext.js
diff --git a/src/hooks/utils/index.js b/src/hooks/utils/index.js
index d4d6152a6..5d189d42e 100644
--- a/src/hooks/utils/index.js
+++ b/src/hooks/utils/index.js
@@ -1,5 +1,3 @@
-
-
export * from './useLocalStorage';
export * from './usePrevious';
export * from './useUpdateEffect';
@@ -7,4 +5,5 @@ export * from './useWatch';
export * from './useWhen';
export * from './useRequestPdf';
export * from './useAsync';
-export * from './useIntersectionObserver';
\ No newline at end of file
+export * from './useIntersectionObserver';
+export * from './useAbilityContext';
\ No newline at end of file
diff --git a/src/hooks/utils/useAbilityContext.js b/src/hooks/utils/useAbilityContext.js
new file mode 100644
index 000000000..8eee4ec39
--- /dev/null
+++ b/src/hooks/utils/useAbilityContext.js
@@ -0,0 +1,6 @@
+import React from 'react';
+import { useAbility } from '@casl/react';
+import { AbilityContext } from '../../components/Can';
+
+export const useAbilityContext = () => useAbility(AbilityContext);
+