diff --git a/src/components/DialogsContainer.js b/src/components/DialogsContainer.js
index 656c7d9d8..d9d3609c5 100644
--- a/src/components/DialogsContainer.js
+++ b/src/components/DialogsContainer.js
@@ -25,11 +25,13 @@ import NotifyReceiptViaSMSDialog from '../containers/Dialogs/NotifyReceiptViaSMS
import NotifyEstimateViaSMSDialog from '../containers/Dialogs/NotifyEstimateViaSMSDialog';
import NotifyPaymentReceiveViaSMSDialog from '../containers/Dialogs/NotifyPaymentReceiveViaSMSDialog';
import SMSMessageDialog from '../containers/Dialogs/SMSMessageDialog';
-import TransactionsLockingDialog from '../containers/Dialogs/TransactionsLockingDialog';
import RefundCreditNoteDialog from '../containers/Dialogs/RefundCreditNoteDialog';
import RefundVendorCreditDialog from '../containers/Dialogs/RefundVendorCreditDialog';
import ReconcileCreditNoteDialog from '../containers/Dialogs/ReconcileCreditNoteDialog';
import ReconcileVendorCreditDialog from '../containers/Dialogs/ReconcileVendorCreditDialog';
+import LockingTransactionsDialog from '../containers/Dialogs/LockingTransactionsDialog';
+import UnlockingTransactionsDialog from '../containers/Dialogs/UnlockingTransactionsDialog';
+import UnlockingPartialTransactionsDialog from '../containers/Dialogs/UnlockingPartialTransactionsDialog';
/**
* Dialogs container.
@@ -63,11 +65,15 @@ export default function DialogsContainer() {
-
+
+
+
);
}
diff --git a/src/config/sidebarMenu.js b/src/config/sidebarMenu.js
index 7a904a1fb..1ea65f2a0 100644
--- a/src/config/sidebarMenu.js
+++ b/src/config/sidebarMenu.js
@@ -425,14 +425,14 @@ export default [
ability: ManualJournalAction.View,
},
},
- // {
- // text: ,
- // href: '/transactions-locking',
- // permission: {
- // subject: AbilitySubject.ManualJournal,
- // ability: ManualJournalAction.TransactionLocking,
- // },
- // },
+ {
+ text: ,
+ href: '/transactions-locking',
+ // permission: {
+ // subject: AbilitySubject.ManualJournal,
+ // ability: ManualJournalAction.TransactionLocking,
+ // },
+ },
{
text: ,
href: '/exchange-rates',
diff --git a/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsDialogContent.js b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsDialogContent.js
new file mode 100644
index 000000000..287b70a38
--- /dev/null
+++ b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsDialogContent.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import { LockingTransactionsFormProvider } from './LockingTransactionsFormProvider';
+import LockingTransactionsForm from './LockingTransactionsForm';
+
+/**
+ * Locking transactions dialog content.
+ */
+export default function LockingTransactionsDialogContent({
+ // #ownProps
+ dialogName,
+}) {
+ return (
+
+
+
+ );
+}
diff --git a/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsForm.js b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsForm.js
new file mode 100644
index 000000000..4de89c382
--- /dev/null
+++ b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsForm.js
@@ -0,0 +1,73 @@
+import React from 'react';
+import moment from 'moment';
+import { Intent } from '@blueprintjs/core';
+import { Formik } from 'formik';
+import intl from 'react-intl-universal';
+
+import '../../../style/pages/TransactionsLocking/TransactionsLockingDialog.scss';
+
+import { AppToaster } from 'components';
+import { CreateLockingTransactionsFormSchema } from './LockingTransactionsForm.schema';
+
+import { useLockingTransactionsContext } from './LockingTransactionsFormProvider';
+import LockingTransactionsFormContent from './LockingTransactionsFormContent';
+
+import withDialogActions from 'containers/Dialog/withDialogActions';
+import { compose } from 'utils';
+
+const defaultInitialValues = {
+ module: 'all',
+ lock_to_date: moment(new Date()).format('YYYY-MM-DD'),
+ reason: '',
+};
+
+/**
+ * Locking Transactions Form.
+ */
+function LockingTransactionsForm({
+ // #withDialogActions
+ closeDialog,
+}) {
+ const { dialogName, createLockingTransactionMutate } =
+ useLockingTransactionsContext();
+
+ // Initial form values.
+ const initialValues = {
+ ...defaultInitialValues,
+ };
+
+ // Handles the form submit.
+ const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
+ setSubmitting(true);
+
+ // Handle request response success.
+ const onSuccess = (response) => {
+ AppToaster.show({
+ message: intl.get('locking_transactions.dialog.success_message'),
+ intent: Intent.SUCCESS,
+ });
+ closeDialog(dialogName);
+ };
+
+ // Handle request response errors.
+ const onError = ({
+ response: {
+ data: { errors },
+ },
+ }) => {
+ setSubmitting(false);
+ };
+
+ createLockingTransactionMutate(values).then(onSuccess).catch(onError);
+ };
+
+ return (
+
+ );
+}
+export default compose(withDialogActions)(LockingTransactionsForm);
diff --git a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingForm.schema.js b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsForm.schema.js
similarity index 63%
rename from src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingForm.schema.js
rename to src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsForm.schema.js
index a74058f3f..d2f8199f9 100644
--- a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingForm.schema.js
+++ b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsForm.schema.js
@@ -3,11 +3,12 @@ import intl from 'react-intl-universal';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
- date: Yup.date().required().label(intl.get('date')),
+ lock_to_date: Yup.date().required().label(intl.get('date')),
+ module: Yup.string().required(),
reason: Yup.string()
.required()
.min(3)
.max(DATATYPES_LENGTH.TEXT)
.label(intl.get('reason')),
});
-export const CreateTransactionsLockingFormSchema = Schema;
+export const CreateLockingTransactionsFormSchema = Schema;
diff --git a/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormContent.js b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormContent.js
new file mode 100644
index 000000000..c7e46a26c
--- /dev/null
+++ b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormContent.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import { Form } from 'formik';
+
+import LockingTransactionsFormFields from './LockingTransactionsFormFields';
+import LockingTransactionsFormFloatingActions from './LockingTransactionsFormFloatingActions';
+
+/**
+ * locking Transactions form content.
+ */
+export default function LockingTransactionsFormContent() {
+ return (
+
+ );
+}
diff --git a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormFields.js b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormFields.js
similarity index 79%
rename from src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormFields.js
rename to src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormFields.js
index bede9d2fc..2c6d1a75b 100644
--- a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormFields.js
+++ b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormFields.js
@@ -14,28 +14,28 @@ import {
} from 'utils';
/**
- * Transactions locking form fields.
+ * locking Transactions form fields.
*/
-export default function TransactionsLockingFormFields() {
+export default function LockingTransactionsFormFields() {
const dateFieldRef = useAutofocus();
return (
- {/*------------ Date -----------*/}
-
+ {/*------------ Locking Date -----------*/}
+
{({ form, field: { value }, meta: { error, touched } }) => (
}
+ label={}
labelInfo={}
intent={inputIntent({ error, touched })}
- helperText={}
+ helperText={}
minimal={true}
className={classNames(CLASSES.FILL, 'form-group--date')}
>
{
- form.setFieldValue('date', formattedDate);
+ form.setFieldValue('lock_to_date', formattedDate);
})}
value={tansformDateValue(value)}
popoverProps={{
@@ -48,11 +48,12 @@ export default function TransactionsLockingFormFields() {
)}
- {/*------------ reasons -----------*/}
+
+ {/*------------ Locking Reason -----------*/}
{({ field, meta: { error, touched } }) => (
}
+ label={}
labelInfo={}
className={'form-group--reason'}
intent={inputIntent({ error, touched })}
diff --git a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFloatingActions.js b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormFloatingActions.js
similarity index 62%
rename from src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFloatingActions.js
rename to src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormFloatingActions.js
index 51c29dedc..b76ee054e 100644
--- a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFloatingActions.js
+++ b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormFloatingActions.js
@@ -3,21 +3,21 @@ import { Intent, Button, Classes } from '@blueprintjs/core';
import { useFormikContext } from 'formik';
import { FormattedMessage as T } from 'components';
-import { useTransactionLockingContext } from './TransactionsLockingFormProvider';
+import { useLockingTransactionsContext } from './LockingTransactionsFormProvider';
import withDialogActions from 'containers/Dialog/withDialogActions';
import { compose } from 'utils';
/**
- * Transactions locking floating actions.
+ * locking Transactions floating actions.
*/
-function TransactionsLockingFloatingActions({
+function LockingTransactionsFormFloatingActions({
// #withDialogActions
closeDialog,
}) {
// Formik context.
const { isSubmitting } = useFormikContext();
- const { dialogName } = useTransactionLockingContext();
+ const { dialogName } = useLockingTransactionsContext();
// Handle cancel button click.
const handleCancelBtnClick = (event) => {
@@ -27,24 +27,22 @@ function TransactionsLockingFloatingActions({
return (
);
}
-export default compose(withDialogActions)(TransactionsLockingFloatingActions);
+export default compose(withDialogActions)(
+ LockingTransactionsFormFloatingActions,
+);
diff --git a/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormProvider.js b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormProvider.js
new file mode 100644
index 000000000..d12a3ca30
--- /dev/null
+++ b/src/containers/Dialogs/LockingTransactionsDialog/LockingTransactionsFormProvider.js
@@ -0,0 +1,31 @@
+import React from 'react';
+import { DialogContent } from 'components';
+import { useCreateLockingTransactoin } from 'hooks/query';
+
+const LockingTransactionsContext = React.createContext();
+
+/**
+ * Locking transactions form provider.
+ */
+function LockingTransactionsFormProvider({ dialogName, ...props }) {
+
+ // Create locking transactions mutations.
+ const { mutateAsync: createLockingTransactionMutate } =
+ useCreateLockingTransactoin();
+
+ // State provider.
+ const provider = {
+ dialogName,
+ createLockingTransactionMutate,
+ };
+ return (
+
+
+
+ );
+}
+
+const useLockingTransactionsContext = () =>
+ React.useContext(LockingTransactionsContext);
+
+export { LockingTransactionsFormProvider, useLockingTransactionsContext };
diff --git a/src/containers/Dialogs/TransactionsLockingDialog/index.js b/src/containers/Dialogs/LockingTransactionsDialog/index.js
similarity index 54%
rename from src/containers/Dialogs/TransactionsLockingDialog/index.js
rename to src/containers/Dialogs/LockingTransactionsDialog/index.js
index d6ff27db8..2b1c19085 100644
--- a/src/containers/Dialogs/TransactionsLockingDialog/index.js
+++ b/src/containers/Dialogs/LockingTransactionsDialog/index.js
@@ -3,28 +3,28 @@ import { Dialog, DialogSuspense, FormattedMessage as T } from 'components';
import withDialogRedux from 'components/DialogReduxConnect';
import { compose } from 'utils';
-const TransactionsLockingContent = React.lazy(() =>
- import('./TransactionsLockingDialogContent'),
+const LockingTransactionsDialogContent = React.lazy(() =>
+ import('./LockingTransactionsDialogContent'),
);
/**
- * Transaction Locking dialog
+ * Locking Transactions dialog
*/
-function TransactionsLockingDialog({ dialogName, payload = {}, isOpen }) {
+function LockingTransactionsDialog({ dialogName, payload = {}, isOpen }) {
return (
}
+ title={}
canEscapeKeyClose={true}
isOpen={isOpen}
className={'dialog--transaction--locking'}
>
-
+
);
}
-export default compose(withDialogRedux())(TransactionsLockingDialog);
+export default compose(withDialogRedux())(LockingTransactionsDialog);
diff --git a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingDialogContent.js b/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingDialogContent.js
deleted file mode 100644
index 28d763962..000000000
--- a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingDialogContent.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react';
-import { TransactionsLockingFormProvider } from './TransactionsLockingFormProvider';
-import TransactionsLockingForm from './TransactionsLockingForm';
-
-export default function TransactionsLockingDialogContent({
- // #ownProps
- dialogName,
-}) {
- return (
-
-
-
- );
-}
diff --git a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingForm.js b/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingForm.js
deleted file mode 100644
index 9bba5437a..000000000
--- a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingForm.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from 'react';
-import moment from 'moment';
-import { Intent } from '@blueprintjs/core';
-import { Formik } from 'formik';
-import intl from 'react-intl-universal';
-
-import '../../../style/pages/TransactionsLocking/TransactionsLockingDialog.scss'
-
-import { AppToaster } from 'components';
-import { CreateTransactionsLockingFormSchema } from './TransactionsLockingForm.schema';
-
-import { useTransactionLockingContext } from './TransactionsLockingFormProvider';
-import TransactionsLockingFormContent from './TransactionsLockingFormContent';
-
-import withDialogActions from 'containers/Dialog/withDialogActions';
-import { compose } from 'utils';
-
-const defaultInitialValues = {
- date: moment(new Date()).format('YYYY-MM-DD'),
- reason: '',
-};
-
-/**
- * Transactions Locking From.
- */
-function TransactionsLockingForm({
- // #withDialogActions
- closeDialog,
-}) {
- const { dialogName } = useTransactionLockingContext();
- // Initial form values.
- const initialValues = {
- ...defaultInitialValues,
- };
-
- // Handles the form submit.
- const handleFormSubmit = (values, { setSubmitting, setErrors }) => {};
-
- return (
-
- );
-}
-export default compose(withDialogActions)(TransactionsLockingForm);
diff --git a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormContent.js b/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormContent.js
deleted file mode 100644
index 43a1e1dda..000000000
--- a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormContent.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import { Form } from 'formik';
-
-import TransactionsLockingFormFields from './TransactionsLockingFormFields';
-import TransactionsLockingFloatingActions from './TransactionsLockingFloatingActions';
-
-/**
- * Transactions locking form content.
- */
-export default function TransactionsLockingFormContent() {
- return (
-
- );
-}
diff --git a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormProvider.js b/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormProvider.js
deleted file mode 100644
index 7a8d95b96..000000000
--- a/src/containers/Dialogs/TransactionsLockingDialog/TransactionsLockingFormProvider.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-import { DialogContent } from 'components';
-
-const TransactionsLockingContext = React.createContext();
-
-function TransactionsLockingFormProvider({ dialogName, ...props }) {
- // State provider.
- const provider = {
- dialogName,
- };
- return (
-
-
-
- );
-}
-
-const useTransactionLockingContext = () =>
- React.useContext(TransactionsLockingContext);
-
-export { TransactionsLockingFormProvider, useTransactionLockingContext };
diff --git a/src/style/pages/TransactionsLocking/TransactionsLockingDialog.scss b/src/style/pages/TransactionsLocking/TransactionsLockingDialog.scss
index b1aed0430..c02dbdd4f 100644
--- a/src/style/pages/TransactionsLocking/TransactionsLockingDialog.scss
+++ b/src/style/pages/TransactionsLocking/TransactionsLockingDialog.scss
@@ -1,8 +1,9 @@
.dialog--transaction--locking {
- max-width: 400px;
+ max-width: 450px;
+
.bp3-form-group {
- margin-bottom: 15px;
- margin-top: 15px;
+ margin-bottom: 10px;
+ margin-top: 10px;
label.bp3-label {
font-size: 13px;
@@ -22,6 +23,9 @@
}
}
.bp3-dialog-footer {
+ display: flex;
+ justify-content: flex-start;
padding-top: 10px;
+ margin-left: 10px;
}
}