diff --git a/src/containers/Alerts/Branches/BranchMarkPrimaryAlert.js b/src/containers/Alerts/Branches/BranchMarkPrimaryAlert.js
new file mode 100644
index 000000000..e61159587
--- /dev/null
+++ b/src/containers/Alerts/Branches/BranchMarkPrimaryAlert.js
@@ -0,0 +1,70 @@
+import React from 'react';
+import intl from 'react-intl-universal';
+import { Intent, Alert } from '@blueprintjs/core';
+import { FormattedMessage as T } from 'components';
+
+import { useMarkPrimaryBranches } from 'hooks/query';
+import { AppToaster } from 'components';
+
+import withAlertActions from 'containers/Alert/withAlertActions';
+import withAlertStoreConnect from 'containers/Alert/withAlertStoreConnect';
+
+import { compose } from 'utils';
+
+/**
+ * branch mark primary alert.
+ */
+function BranchMarkPrimaryAlert({
+ name,
+
+ // #withAlertStoreConnect
+ isOpen,
+ payload: { branchId },
+
+ // #withAlertActions
+ closeAlert,
+}) {
+ const { mutateAsync: markPrimaryBranchMutate, isLoading } =
+ useMarkPrimaryBranches();
+
+ // Handle cancel mark primary alert.
+ const handleCancelMarkPrimaryAlert = () => {
+ closeAlert(name);
+ };
+
+ // andle cancel mark primary confirm.
+ const handleConfirmMarkPrimaryBranch = () => {
+ markPrimaryBranchMutate(branchId)
+ .then(() => {
+ AppToaster.show({
+ message: intl.get('branch.alert.mark_primary_message'),
+ intent: Intent.SUCCESS,
+ });
+ closeAlert(name);
+ })
+ .catch((error) => {
+ closeAlert(name);
+ });
+ };
+
+ return (
+ }
+ confirmButtonText={}
+ intent={Intent.WARNING}
+ isOpen={isOpen}
+ onCancel={handleCancelMarkPrimaryAlert}
+ onConfirm={handleConfirmMarkPrimaryBranch}
+ loading={isLoading}
+ >
+
+
+
+
+ );
+}
+
+export default compose(
+ withAlertStoreConnect(),
+ withAlertActions,
+)(BranchMarkPrimaryAlert);
diff --git a/src/containers/Alerts/Warehouses/WarehouseMarkPrimaryAlert.js b/src/containers/Alerts/Warehouses/WarehouseMarkPrimaryAlert.js
new file mode 100644
index 000000000..b51c7fa45
--- /dev/null
+++ b/src/containers/Alerts/Warehouses/WarehouseMarkPrimaryAlert.js
@@ -0,0 +1,70 @@
+import React from 'react';
+import intl from 'react-intl-universal';
+import { Intent, Alert } from '@blueprintjs/core';
+import { FormattedMessage as T } from 'components';
+
+import { useMarkPrimaryWarehouse } from 'hooks/query';
+import { AppToaster } from 'components';
+
+import withAlertActions from 'containers/Alert/withAlertActions';
+import withAlertStoreConnect from 'containers/Alert/withAlertStoreConnect';
+
+import { compose } from 'utils';
+
+/**
+ * warehouse mark primary alert.
+ */
+function WarehouseMarkPrimaryAlert({
+ name,
+
+ // #withAlertStoreConnect
+ isOpen,
+ payload: { warehouseId },
+
+ // #withAlertActions
+ closeAlert,
+}) {
+ const { mutateAsync: markPrimaryWarehouseMutate, isLoading } =
+ useMarkPrimaryWarehouse();
+
+ // Handle cancel mark primary alert.
+ const handleCancelMarkPrimaryAlert = () => {
+ closeAlert(name);
+ };
+
+ // andle cancel mark primary confirm.
+ const handleConfirmMarkPrimaryWarehouse = () => {
+ markPrimaryWarehouseMutate(warehouseId)
+ .then(() => {
+ AppToaster.show({
+ message: intl.get('warehouse.alert.mark_primary_message'),
+ intent: Intent.SUCCESS,
+ });
+ closeAlert(name);
+ })
+ .catch((error) => {
+ closeAlert(name);
+ });
+ };
+
+ return (
+ }
+ confirmButtonText={}
+ intent={Intent.WARNING}
+ isOpen={isOpen}
+ onCancel={handleCancelMarkPrimaryAlert}
+ onConfirm={handleConfirmMarkPrimaryWarehouse}
+ loading={isLoading}
+ >
+
+
+
+
+ );
+}
+
+export default compose(
+ withAlertStoreConnect(),
+ withAlertActions,
+)(WarehouseMarkPrimaryAlert);
diff --git a/src/containers/Preferences/Branches/BranchesAlerts.js b/src/containers/Preferences/Branches/BranchesAlerts.js
index c444030db..2facc34b8 100644
--- a/src/containers/Preferences/Branches/BranchesAlerts.js
+++ b/src/containers/Preferences/Branches/BranchesAlerts.js
@@ -3,5 +3,14 @@ import React from 'react';
const BranchDeleteAlert = React.lazy(() =>
import('../../Alerts/Branches/BranchDeleteAlert'),
);
+const BranchMarkPrimaryAlert = React.lazy(() =>
+ import('../../Alerts/Branches/BranchMarkPrimaryAlert'),
+);
-export default [{ name: 'branch-delete', component: BranchDeleteAlert }];
+export default [
+ { name: 'branch-delete', component: BranchDeleteAlert },
+ {
+ name: 'branch-mark-primary',
+ component: BranchMarkPrimaryAlert,
+ },
+];
diff --git a/src/containers/Preferences/Branches/BranchesDataTable.js b/src/containers/Preferences/Branches/BranchesDataTable.js
index 1a47a03d8..e34affa54 100644
--- a/src/containers/Preferences/Branches/BranchesDataTable.js
+++ b/src/containers/Preferences/Branches/BranchesDataTable.js
@@ -27,22 +27,27 @@ function BranchesDataTable({
// Table columns.
const columns = useBranchesTableColumns();
- const Time = true;
-
const { branches, isBranchesLoading, isBranchesFetching } =
useBranchesContext();
+ // Handle edit branch.
const handleEditBranch = ({ id }) => {
openDialog('branch-form', { branchId: id, action: 'edit' });
};
+ // Handle delete branch.
const handleDeleteBranch = ({ id }) => {
openAlert('branch-delete', { branchId: id });
};
- if (Time) {
- return ;
- }
+ // Handle mark primary branch.
+ const handleMarkPrimaryBranch = ({ id }) => {
+ openAlert('branch-mark-primary', { branchId: id });
+ };
+
+ // if (type) {
+ // return ;
+ // }
return (
@@ -58,6 +63,7 @@ function BranchesDataTable({
payload={{
onEdit: handleEditBranch,
onDelete: handleDeleteBranch,
+ onMarkPrimary: handleMarkPrimaryBranch,
}}
/>
diff --git a/src/containers/Preferences/Branches/components.js b/src/containers/Preferences/Branches/components.js
index 771681fba..defa408d6 100644
--- a/src/containers/Preferences/Branches/components.js
+++ b/src/containers/Preferences/Branches/components.js
@@ -9,7 +9,7 @@ import { Icon } from 'components';
* Context menu of Branches.
*/
export function ActionsMenu({
- payload: { onEdit, onDelete },
+ payload: { onEdit, onDelete, onMarkPrimary },
row: { original },
}) {
return (
@@ -19,6 +19,11 @@ export function ActionsMenu({
text={intl.get('branches.action.edit_branch')}
onClick={safeCallback(onEdit, original)}
/>
+ }
+ text={intl.get('branches.action.mark_as_primary')}
+ onClick={safeCallback(onMarkPrimary, original)}
+ />
}
diff --git a/src/containers/Preferences/Warehouses/WarehousesAlerts.js b/src/containers/Preferences/Warehouses/WarehousesAlerts.js
index 7e19d865a..bf2ce3883 100644
--- a/src/containers/Preferences/Warehouses/WarehousesAlerts.js
+++ b/src/containers/Preferences/Warehouses/WarehousesAlerts.js
@@ -3,8 +3,17 @@ import React from 'react';
const WarehouseDeleteAlert = React.lazy(() =>
import('../../Alerts/Warehouses/WarehouseDeleteAlert'),
);
+const WarehouseMarkPrimaryAlert = React.lazy(() =>
+ import('../../Alerts/Warehouses/WarehouseMarkPrimaryAlert'),
+);
/**
* Warehouses alerts.
*/
-export default [{ name: 'warehouse-delete', component: WarehouseDeleteAlert }];
+export default [
+ { name: 'warehouse-delete', component: WarehouseDeleteAlert },
+ {
+ name: 'warehouse-mark-primary',
+ component: WarehouseMarkPrimaryAlert,
+ },
+];
diff --git a/src/containers/Preferences/Warehouses/WarehousesGridItems.js b/src/containers/Preferences/Warehouses/WarehousesGridItems.js
index edc33ff22..4668ce10a 100644
--- a/src/containers/Preferences/Warehouses/WarehousesGridItems.js
+++ b/src/containers/Preferences/Warehouses/WarehousesGridItems.js
@@ -30,12 +30,18 @@ function WarehousesGridItems({
openAlert('warehouse-delete', { warehouseId: warehouse.id });
};
+ // Handle mark primary warehouse.
+ const handleMarkPrimaryWarehouse = () => {
+ openAlert('warehouse-mark-primary', { warehouseId: warehouse.id });
+ };
+
return (
}
>
diff --git a/src/containers/Preferences/Warehouses/WarehousesList.js b/src/containers/Preferences/Warehouses/WarehousesList.js
index d23f20632..c2e6c7816 100644
--- a/src/containers/Preferences/Warehouses/WarehousesList.js
+++ b/src/containers/Preferences/Warehouses/WarehousesList.js
@@ -17,7 +17,7 @@ function WarehousesList({
changePreferencesPageTitle(intl.get('warehouses.label'));
}, [changePreferencesPageTitle]);
- // if () {
+ // if (type) {
// return ;
// }
diff --git a/src/containers/Preferences/Warehouses/WarehousesProvider.js b/src/containers/Preferences/Warehouses/WarehousesProvider.js
index bbcfdcf38..69ba03b5f 100644
--- a/src/containers/Preferences/Warehouses/WarehousesProvider.js
+++ b/src/containers/Preferences/Warehouses/WarehousesProvider.js
@@ -28,11 +28,11 @@ function WarehousesProvider({ ...props }) {
)}
>
- {isWarehouesLoading ? (
+ {/* {isWarehouesLoading ? (
- ) : (
+ ) : ( */}
- )}
+ {/* )} */}
);
diff --git a/src/containers/Preferences/Warehouses/components.js b/src/containers/Preferences/Warehouses/components.js
index 7027343b5..bcaf8f419 100644
--- a/src/containers/Preferences/Warehouses/components.js
+++ b/src/containers/Preferences/Warehouses/components.js
@@ -22,7 +22,7 @@ export function WarehouseContextMenu({
onClick={safeCallback(onEditClick)}
/>
}
+ icon={}
text={intl.get('warehouses.action.make_as_parimary')}
onClick={safeCallback(onPrimary)}
/>
diff --git a/src/hooks/query/branches.js b/src/hooks/query/branches.js
index 2eb95f58c..b9a9e75c7 100644
--- a/src/hooks/query/branches.js
+++ b/src/hooks/query/branches.js
@@ -113,3 +113,21 @@ export function useActivateBranches(props) {
...props,
});
}
+
+/**
+ * Mark primary the given branch.
+ */
+export function useMarkPrimaryBranches(props) {
+ const queryClient = useQueryClient();
+ const apiRequest = useApiRequest();
+
+ return useMutation((id) => apiRequest.post(`branches/${id}/mark-primary`), {
+ onSuccess: (res, id) => {
+ // Invalidate specific inventory adjustment.
+ queryClient.invalidateQueries([t.BRANCH, id]);
+
+ commonInvalidateQueries(queryClient);
+ },
+ ...props,
+ });
+}
diff --git a/src/hooks/query/warehouses.js b/src/hooks/query/warehouses.js
index 18bca2b04..2499aaed4 100644
--- a/src/hooks/query/warehouses.js
+++ b/src/hooks/query/warehouses.js
@@ -233,3 +233,21 @@ export function useActivateWarehouses(props) {
...props,
});
}
+
+/**
+ * Mark primary the given branch.
+ */
+export function useMarkPrimaryWarehouse(props) {
+ const queryClient = useQueryClient();
+ const apiRequest = useApiRequest();
+
+ return useMutation((id) => apiRequest.post(`warehouses/${id}/mark-primary`), {
+ onSuccess: (res, id) => {
+ // Invalidate specific inventory adjustment.
+ queryClient.invalidateQueries([t.WAREHOUSE, id]);
+
+ commonInvalidateQueries(queryClient);
+ },
+ ...props,
+ });
+}
diff --git a/src/lang/en/index.json b/src/lang/en/index.json
index 51c53548b..b41c21b0d 100644
--- a/src/lang/en/index.json
+++ b/src/lang/en/index.json
@@ -1816,12 +1816,12 @@
"warehouse_transfer.label.edit_warehouse_transfer": "Edit Warehouse Transfer",
"warehouse_transfer.label.new_warehouse_transfer": "New Warehouse Transfer",
"warehouse_transfer.label.warehouse_transfer_list": "Warehouse Transfers List",
- "warehouse_transfer.success_message":"The warehouse transfer transaction has been created successfully.",
- "warehouse_transfer.edit_success_message":"The warehouse transfer transaction has been created successfully.",
- "select_warehouse_transfer":"Select Warehouse Transfer",
- "warehouse_transfer.alert.delete_message":"The warehouse transfer transaction has been deleted successfully",
- "warehouse_transfer.once_delete_this_warehouse_transfer":"Once you delete this warehouse transfer, you won't be able to restore it later. Are you sure you want to delete this warehouse transfer?",
- "warehouse_transfer.error.could_not_transfer_item_from_source_to_destination":"Could not transfer item from source to destination on the same warehouse",
+ "warehouse_transfer.success_message": "The warehouse transfer transaction has been created successfully.",
+ "warehouse_transfer.edit_success_message": "The warehouse transfer transaction has been created successfully.",
+ "select_warehouse_transfer": "Select Warehouse Transfer",
+ "warehouse_transfer.alert.delete_message": "The warehouse transfer transaction has been deleted successfully",
+ "warehouse_transfer.once_delete_this_warehouse_transfer": "Once you delete this warehouse transfer, you won't be able to restore it later. Are you sure you want to delete this warehouse transfer?",
+ "warehouse_transfer.error.could_not_transfer_item_from_source_to_destination": "Could not transfer item from source to destination on the same warehouse",
"credit_note_preview.dialog.title": "Credit Note PDF Preview",
"payment_receive_preview.dialog.title": "Payment Receive PDF Preview",
@@ -1829,6 +1829,7 @@
"branches.label.new_branch": "New Branch",
"branches.action.edit_branch": "Edit Branch",
"branches.action.delete_branch": "Delete Branch",
+ "branches.action.mark_as_primary": "Make as Primary",
"branches.column.branch_name": "Branch name",
"branches.column.address": "Address",
"branches.column.phone_number": "Phone number",
@@ -1845,8 +1846,15 @@
"branch.dialog.label.email": "Email",
"branch.dialog.label.website": "Website",
"branch.dialog.success_message": "The branch has been created successfully.",
- "branch.alert.delete_message":"The branch has been deleted successfully",
- "branch.once_delete_this_branch":"Once you delete this branch, you won't be able to restore it later. Are you sure you want to delete this branch?",
- "realized_gain_or_loss.label":"Realized Gain or Loss",
- "unrealized_gain_or_loss.label":"Unrealized Gain or Loss"
+ "branch.alert.delete_message": "The branch has been deleted successfully",
+ "branch.once_delete_this_branch": "Once you delete this branch, you won't be able to restore it later. Are you sure you want to delete this branch?",
+ "realized_gain_or_loss.label": "Realized Gain or Loss",
+ "unrealized_gain_or_loss.label": "Unrealized Gain or Loss",
+ "branch_activate.dialog_success_message": "Multi-branches feature has been activated successfully.",
+ "branch.alert.mark_primary_message": "The branch has been marked as primary.",
+ "branch.alert.are_you_sure_you_want_to_make": "Are you sure you want to make a primary branch?",
+ "warehouse_activate.dialog_success_message": "Multi-branches feature has been activated successfully.",
+ "warehouse.alert.mark_primary_message": "The given warehouse has been marked as primary.",
+ "warehouse.alert.are_you_sure_you_want_to_make": "Are you sure you want to make a primary warehouse?",
+ "make_primary": "Make Primary"
}
\ No newline at end of file