From ec2d0792919c5c653f8519cb2f75edfc1759015f Mon Sep 17 00:00:00 2001 From: elforjani3 Date: Tue, 24 Nov 2020 21:05:51 +0200 Subject: [PATCH 01/17] Fix: FloatingActions. --- .../Accounting/MakeJournalEntriesFooter.js | 231 +++++++++++--- .../Accounting/MakeJournalEntriesForm.js | 44 +-- .../Expenses/ExpenseFloatingActions.js | 223 +++++++------ client/src/containers/Expenses/ExpenseForm.js | 6 +- .../Purchases/Bill/BillFloatingActions.js | 221 ++++++++++--- .../src/containers/Purchases/Bill/BillForm.js | 23 +- .../PaymentMadeFloatingActions.js | 111 ++++--- .../Purchases/PaymentMades/PaymentMadeForm.js | 22 +- .../Sales/Estimate/EstimateFloatingActions.js | 198 +++++++++--- .../containers/Sales/Estimate/EstimateForm.js | 10 +- .../Sales/Invoice/InvoiceFloatingActions.js | 294 ++++++++++-------- .../containers/Sales/Invoice/InvoiceForm.js | 6 +- .../PaymentReceiveFloatingActions.js | 43 ++- .../PaymentReceive/PaymentReceiveForm.js | 6 +- .../containers/Sales/Receipt/ReceiptForm.js | 7 +- .../Receipt/ReceiptFormFloatingActions.js | 206 ++++++++---- 16 files changed, 1147 insertions(+), 504 deletions(-) diff --git a/client/src/containers/Accounting/MakeJournalEntriesFooter.js b/client/src/containers/Accounting/MakeJournalEntriesFooter.js index 6589bf431..be7e06005 100644 --- a/client/src/containers/Accounting/MakeJournalEntriesFooter.js +++ b/client/src/containers/Accounting/MakeJournalEntriesFooter.js @@ -1,58 +1,199 @@ import React from 'react'; -import { Intent, Button } from '@blueprintjs/core'; +import { + Intent, + Button, + ButtonGroup, + Popover, + PopoverInteractionKind, + Position, + Menu, + MenuItem, +} from '@blueprintjs/core'; import { FormattedMessage as T } from 'react-intl'; +import { CLASSES } from 'common/classes'; +import classNames from 'classnames'; +import { saveInvoke } from 'utils'; +import { If, Icon } from 'components'; +/** + * Make Journal floating actions bar. + */ export default function MakeJournalEntriesFooter({ isSubmitting, onSubmitClick, onCancelClick, manualJournalId, + onSubmitForm, + onResetForm, + manualJournalPublished, }) { + const handleSubmitPublishBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: true, + }); + }; + + const handleSubmitPublishAndNewBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + resetForm: true, + }); + }; + + const handleSubmitPublishContinueEditingBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); + }; + + const handleSubmitDraftBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: false, + }); + }; + + const handleSubmitDraftAndNewBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + resetForm: true, + }); + }; + + const handleSubmitDraftContinueEditingBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + }); + }; + + const handleCancelBtnClick = (event) => { + saveInvoke(onCancelClick, event); + }; + + const handleClearBtnClick = (event) => { + // saveInvoke(onClearClick, event); + onResetForm(); + }; + return ( -
- +
+ {/* ----------- Save And Publish ----------- */} + + +
); } diff --git a/client/src/containers/Accounting/MakeJournalEntriesForm.js b/client/src/containers/Accounting/MakeJournalEntriesForm.js index 0eded5f18..988bceb94 100644 --- a/client/src/containers/Accounting/MakeJournalEntriesForm.js +++ b/client/src/containers/Accounting/MakeJournalEntriesForm.js @@ -11,6 +11,7 @@ import moment from 'moment'; import { Intent } from '@blueprintjs/core'; import { useIntl } from 'react-intl'; import { pick, setWith } from 'lodash'; +import { useHistory } from 'react-router-dom'; import MakeJournalEntriesHeader from './MakeJournalEntriesHeader'; import MakeJournalEntriesFooter from './MakeJournalEntriesFooter'; @@ -77,6 +78,9 @@ function MakeJournalEntriesForm({ onCancelForm, }) { const { formatMessage } = useIntl(); + const history = useHistory(); + const [submitPayload, setSubmitPayload] = useState({}); + const { setFiles, saveMedia, @@ -163,8 +167,6 @@ function MakeJournalEntriesForm({ [onFormSubmit], ); - const [payload, setPayload] = useState({}); - const defaultEntry = useMemo( () => ({ index: 0, @@ -183,6 +185,7 @@ function MakeJournalEntriesForm({ date: moment(new Date()).format('YYYY-MM-DD'), description: '', reference: '', + status:'', currency_code: '', entries: [...repeatValue(defaultEntry, 4)], }), @@ -289,6 +292,8 @@ function MakeJournalEntriesForm({ setFieldValue, handleSubmit, getFieldProps, + submitForm, + resetForm, touched, isSubmitting, } = useFormik({ @@ -327,7 +332,7 @@ function MakeJournalEntriesForm({ setSubmitting(false); return; } - const form = { ...values, status: payload.publish, entries }; + const form = { ...values, status: submitPayload.publish, entries }; const saveJournal = (mediaIds) => new Promise((resolve, reject) => { @@ -344,7 +349,7 @@ function MakeJournalEntriesForm({ intent: Intent.SUCCESS, }); setSubmitting(false); - saveInvokeSubmit({ action: 'update', ...payload }); + saveInvokeSubmit({ action: 'update', ...submitPayload }); clearSavedMediaIds([]); resetForm(); resolve(response); @@ -364,9 +369,11 @@ function MakeJournalEntriesForm({ intent: Intent.SUCCESS, }); setSubmitting(false); - saveInvokeSubmit({ action: 'new', ...payload }); + saveInvokeSubmit({ action: 'new', ...submitPayload }); clearSavedMediaIds(); - resetForm(); + if (submitPayload.resetForm) { + resetForm(); + } resolve(response); }) .catch((errors) => { @@ -407,20 +414,15 @@ function MakeJournalEntriesForm({ ]); const handleSubmitClick = useCallback( - (payload) => { - setPayload(payload); - // formik.resetForm(); - handleSubmit(); + (event, payload) => { + setSubmitPayload({ ...payload }); }, - [setPayload, handleSubmit], + [setSubmitPayload], ); - const handleCancelClick = useCallback( - (payload) => { - onCancelForm && onCancelForm(payload); - }, - [onCancelForm], - ); + const handleCancelClick = useCallback(() => { + history.goBack(); + }, [history]); const handleDeleteFile = useCallback( (_deletedFiles) => { @@ -453,11 +455,12 @@ function MakeJournalEntriesForm({ const handleJournalNumberChanged = useCallback( (journalNumber) => { changePageSubtitle( - defaultToTransform(journalNumber, `No. ${journalNumber}`, '') + defaultToTransform(journalNumber, `No. ${journalNumber}`, ''), ); }, [changePageSubtitle], ); + return (
@@ -482,7 +485,10 @@ function MakeJournalEntriesForm({ isSubmitting={isSubmitting} onSubmitClick={handleSubmitClick} onCancelClick={handleCancelClick} - manualJournal={manualJournalId} + manualJournalId={manualJournalId} + manualJournalPublished={values.status} + onSubmitForm={submitForm} + onResetForm={resetForm} />
diff --git a/client/src/containers/Expenses/ExpenseFloatingActions.js b/client/src/containers/Expenses/ExpenseFloatingActions.js index eda5ff0a9..84fc445ea 100644 --- a/client/src/containers/Expenses/ExpenseFloatingActions.js +++ b/client/src/containers/Expenses/ExpenseFloatingActions.js @@ -14,7 +14,7 @@ import { FormattedMessage as T } from 'react-intl'; import { CLASSES } from 'common/classes'; import classNames from 'classnames'; import { saveInvoke } from 'utils'; -import { Icon } from 'components'; +import { Icon, If } from 'components'; /** * Expense form floating actions. @@ -25,11 +25,18 @@ export default function ExpenseFloatingFooter({ onCancelClick, onDraftClick, onClearClick, - onSubmitAndNewClick, onSubmitForm, onResetForm, expense, + expensePublished, }) { + const handleSubmitPublishBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: true, + }); + }; + const handleSubmitPublishAndNewBtnClick = (event) => { onSubmitForm(); saveInvoke(onSubmitClick, event, { @@ -47,6 +54,13 @@ export default function ExpenseFloatingFooter({ }); }; + const handleSubmitDraftBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: false, + }); + }; + const handleSubmitDraftAndNewBtnClick = (event) => { onSubmitForm(); saveInvoke(onSubmitClick, event, { @@ -60,106 +74,129 @@ export default function ExpenseFloatingFooter({ onSubmitForm(); saveInvoke(onSubmitClick, event, { redirect: false, - publish: true, + publish: false, }); }; + const handleCancelBtnClick = (event) => { + saveInvoke(onCancelClick, event); + }; + + const handleClearBtnClick = (event) => { + // saveInvoke(onClearClick, event); + onResetForm(); + }; + return (
- - {/* ----------- Save And Publish ----------- */} -
); } diff --git a/client/src/containers/Expenses/ExpenseForm.js b/client/src/containers/Expenses/ExpenseForm.js index 943df21a9..189e31d96 100644 --- a/client/src/containers/Expenses/ExpenseForm.js +++ b/client/src/containers/Expenses/ExpenseForm.js @@ -304,7 +304,6 @@ function ExpenseForm({ history.goBack(); }, [history]); - const handleDeleteFile = useCallback( (_deletedFiles) => { _deletedFiles.forEach((deletedFile) => { @@ -332,7 +331,7 @@ function ExpenseForm({ ]), ); }; - + return (
@@ -374,7 +373,8 @@ function ExpenseForm({ onCancelClick={handleCancelClick} onSubmitForm={submitForm} onResetForm={resetForm} - expense={expense} + expense={expenseId} + expensePublished={true} />
diff --git a/client/src/containers/Purchases/Bill/BillFloatingActions.js b/client/src/containers/Purchases/Bill/BillFloatingActions.js index c71848ea5..bdadae9e8 100644 --- a/client/src/containers/Purchases/Bill/BillFloatingActions.js +++ b/client/src/containers/Purchases/Bill/BillFloatingActions.js @@ -1,8 +1,24 @@ import React from 'react'; -import { Intent, Button } from '@blueprintjs/core'; +import { + Intent, + Button, + ButtonGroup, + Popover, + PopoverInteractionKind, + Position, + Menu, + MenuItem, +} from '@blueprintjs/core'; +import { useFormikContext } from 'formik'; import { FormattedMessage as T } from 'react-intl'; +import { CLASSES } from 'common/classes'; +import classNames from 'classnames'; import { saveInvoke } from 'utils'; +import { If, Icon } from 'components'; +/** + * Bill floating actions bar. + */ export default function BillFloatingActions({ isSubmitting, onSubmitClick, @@ -10,53 +26,176 @@ export default function BillFloatingActions({ onCancelClick, onClearClick, billId, + billPublished, }) { + const { resetForm, submitForm } = useFormikContext(); + + const handleSubmitPublishBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + }); + }; + + const handleSubmitPublishAndNewBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + resetForm: true, + }); + }; + + const handleSubmitPublishContinueEditingBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); + }; + + const handleSubmitDraftBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: false, + }); + }; + + const handleSubmitDraftAndNewBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + resetForm: true, + }); + }; + + const handleSubmitDraftContinueEditingBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); + }; + + const handleCancelBtnClick = (event) => { + saveInvoke(onCancelClick, event); + }; + + const handleClearBtnClick = (event) => { + // saveInvoke(onClearClick, event); + resetForm(); + }; + return ( -
- - - - +
+ {/* ----------- Save And Publish ----------- */} + + + - + onClick={handleClearBtnClick} + text={billId ? : } + /> + {/* ----------- Cancel ----------- */} + onClick={handleCancelBtnClick} + text={} + />
); } diff --git a/client/src/containers/Purchases/Bill/BillForm.js b/client/src/containers/Purchases/Bill/BillForm.js index e9488d242..01b9cc136 100644 --- a/client/src/containers/Purchases/Bill/BillForm.js +++ b/client/src/containers/Purchases/Bill/BillForm.js @@ -22,7 +22,12 @@ import withBillDetail from './withBillDetail'; import { AppToaster } from 'components'; import { ERROR } from 'common/errors'; -import { compose, repeatValue, defaultToTransform, orderingLinesIndexes } from 'utils'; +import { + compose, + repeatValue, + defaultToTransform, + orderingLinesIndexes, +} from 'utils'; const MIN_LINES_NUMBER = 5; @@ -154,11 +159,13 @@ function BillForm({ }); setSubmitting(false); - resetForm(); changePageSubtitle(''); if (submitPayload.redirect) { - history.go('/bills'); + history.push('/bills'); + } + if (submitPayload.resetForm) { + resetForm(); } }; // Handle the request error. @@ -189,9 +196,12 @@ function BillForm({ [changePageSubtitle], ); - const handleSubmitClick = useCallback(() => { - setSubmitPayload({ redirect: true }); - }, [setSubmitPayload]); + const handleSubmitClick = useCallback( + (event, payload) => { + setSubmitPayload({ ...payload }); + }, + [setSubmitPayload], + ); const handleCancelClick = useCallback(() => { history.goBack(); @@ -218,6 +228,7 @@ function BillForm({ diff --git a/client/src/containers/Purchases/PaymentMades/PaymentMadeFloatingActions.js b/client/src/containers/Purchases/PaymentMades/PaymentMadeFloatingActions.js index 8befdee8e..7b4363e14 100644 --- a/client/src/containers/Purchases/PaymentMades/PaymentMadeFloatingActions.js +++ b/client/src/containers/Purchases/PaymentMades/PaymentMadeFloatingActions.js @@ -1,9 +1,19 @@ import React from 'react'; -import { Intent, Button } from '@blueprintjs/core'; +import { + Intent, + Button, + ButtonGroup, + Popover, + PopoverInteractionKind, + Position, + Menu, + MenuItem, +} from '@blueprintjs/core'; import { FormattedMessage as T } from 'react-intl'; import classNames from 'classnames'; - import { CLASSES } from 'common/classes'; +import { saveInvoke } from 'utils'; +import { Icon } from 'components'; /** * Payment made floating actions bar. @@ -13,56 +23,85 @@ export default function PaymentMadeFloatingActions({ onSubmitClick, onCancelClick, onClearBtnClick, + onSubmitForm, + paymentMadeId, }) { + const handleSubmitBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + }); + }; + const handleClearBtnClick = (event) => { onClearBtnClick && onClearBtnClick(event); }; - const handleSubmitClick = (event) => { - onSubmitClick && onSubmitClick(event, { redirect: true }); - }; - - const handleCancelClick = (event) => { + const handleCancelBtnClick = (event) => { onCancelClick && onCancelClick(event); + saveInvoke(onCancelClick, event); }; + const handleSubmitAndNewClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + }); + }; + + const handleSubmitContinueEditingBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); + }; return (
- - - - + {/* ----------- Save and New ----------- */} + + - + text={paymentMadeId ? : } + /> + {/* ----------- Cancel ----------- */} + onClick={handleCancelBtnClick} + text={} + />
); } diff --git a/client/src/containers/Purchases/PaymentMades/PaymentMadeForm.js b/client/src/containers/Purchases/PaymentMades/PaymentMadeForm.js index b12a59cbd..073e79033 100644 --- a/client/src/containers/Purchases/PaymentMades/PaymentMadeForm.js +++ b/client/src/containers/Purchases/PaymentMades/PaymentMadeForm.js @@ -81,6 +81,7 @@ function PaymentMadeForm({ const [clearLinesAlert, setClearLinesAlert] = useState(false); const [clearFormAlert, setClearFormAlert] = useState(false); const [fullAmount, setFullAmount] = useState(null); + const [submitPayload, setSubmitPayload] = useState({}); const [localPaymentEntries, setLocalPaymentEntries] = useState( paymentMadeEntries, @@ -96,7 +97,7 @@ function PaymentMadeForm({ const validationSchema = isNewMode ? CreatePaymentMadeFormSchema : EditPaymentMadeFormSchema; - + // Form initial values. const initialValues = useMemo( () => ({ @@ -155,8 +156,13 @@ function PaymentMadeForm({ intent: Intent.SUCCESS, }); setSubmitting(false); - resetForm(); + // resetForm(); changePageSubtitle(''); + + if (submitPayload.redirect) { + history.push('/payment-mades'); + } + }; const onError = (errors) => { @@ -187,6 +193,7 @@ function PaymentMadeForm({ values, handleSubmit, isSubmitting, + submitForm, } = useFormik({ validationSchema, initialValues, @@ -300,6 +307,14 @@ function PaymentMadeForm({ [values.entries], ); + const handleSubmitClick = useCallback( + (event, payload) => { + setSubmitPayload({ ...payload }); + }, + [setSubmitPayload], + ); + + return (
{/* { + const handleSubmitPublishBtnClick = (event) => { saveInvoke(onSubmitClick, event, { redirect: true, + publish: true + }); + }; + + const handleSubmitPublishAndNewBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + resetForm: true, + }); + }; + + const handleSubmitPublishContinueEditingBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); + }; + + const handleSubmitDraftBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: false, + }); + }; + + const handleSubmitDraftAndNewBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + resetForm: true, + }); + }; + + const handleSubmitDraftContinueEditingBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, }); }; @@ -43,56 +86,117 @@ export default function EstimateFloatingActions({ resetForm(); }; - const handleSubmitAndNewClick = (event) => { - submitForm(); - saveInvoke(onSubmitClick, event, { - redirect: false, - }); - }; - return (
- - {/* ----------- Save and New ----------- */} -
); } diff --git a/client/src/containers/Sales/Estimate/EstimateForm.js b/client/src/containers/Sales/Estimate/EstimateForm.js index 21eb167cf..32e427339 100644 --- a/client/src/containers/Sales/Estimate/EstimateForm.js +++ b/client/src/containers/Sales/Estimate/EstimateForm.js @@ -103,9 +103,9 @@ const EstimateForm = ({ : estimateNextNumber; useEffect(() => { - const transNumber = !isNewMode ? estimate.estimate_number : estimateNumber; + const transNumber = !isNewMode ? estimate.estimate_number : estimateNumber; - if (isNewMode) { + if (!isNewMode) { changePageTitle(formatMessage({ id: 'edit_estimate' })); } else { changePageTitle(formatMessage({ id: 'new_estimate' })); @@ -199,11 +199,13 @@ const EstimateForm = ({ intent: Intent.SUCCESS, }); setSubmitting(false); - resetForm(); if (submitPayload.redirect) { history.push('/estimates'); } + if (submitPayload.resetForm) { + resetForm(); + } }; const onError = (errors) => { @@ -263,8 +265,8 @@ const EstimateForm = ({ estimateId={estimateId} onSubmitClick={handleSubmitClick} onCancelClick={handleCancelClick} + estimatePublished={true} /> - )} diff --git a/client/src/containers/Sales/Invoice/InvoiceFloatingActions.js b/client/src/containers/Sales/Invoice/InvoiceFloatingActions.js index 0004df237..39b586a40 100644 --- a/client/src/containers/Sales/Invoice/InvoiceFloatingActions.js +++ b/client/src/containers/Sales/Invoice/InvoiceFloatingActions.js @@ -14,8 +14,7 @@ import { FormattedMessage as T } from 'react-intl'; import { CLASSES } from 'common/classes'; import classNames from 'classnames'; import { saveInvoke } from 'utils'; -import { Icon } from 'components'; - +import { If, Icon } from 'components'; /** * Invoice floating actions bar. @@ -26,151 +25,178 @@ export default function InvoiceFloatingActions({ onCancelClick, onClearClick, invoice, + invoicePublished, }) { const { resetForm, submitForm } = useFormikContext(); - const handleSubmitPublishAndNewBtnClick = useCallback( - (event) => { - submitForm(); - saveInvoke(onSubmitClick, event, { - redirect: false, - publish: true, - resetForm: true, - }); - }, - [submitForm], - ); + const handleSubmitPublishBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: true + }); + }; - const handleSubmitPublishContinueEditingBtnClick = useCallback( - (event) => { - submitForm(); - saveInvoke(onSubmitClick, event, { - redirect: false, - publish: true, - }); - }, - [submitForm], - ); + const handleSubmitPublishAndNewBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + resetForm: true, + }); + }; - const handleSubmitDraftAndNewBtnClick = useCallback( - (event) => { - submitForm(); - saveInvoke(onSubmitClick, event, { - redirect: false, - publish: false, - resetForm: true, - }); - }, - [submitForm], - ); + const handleSubmitPublishContinueEditingBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); + }; - const handleSubmitDraftContinueEditingBtnClick = useCallback( - (event) => { - submitForm(); - saveInvoke(onSubmitClick, event, { - redirect: false, - publish: true, - }); - }, - [submitForm], - ); + const handleSubmitDraftBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: false, + }); + }; + + const handleSubmitDraftAndNewBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + resetForm: true, + }); + }; + + const handleSubmitDraftContinueEditingBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + }); + }; + + const handleCancelBtnClick = (event) => { + saveInvoke(onCancelClick, event); + }; + + const handleClearBtnClick = (event) => { + // saveInvoke(onClearClick, event); + resetForm(); + }; return (
- - {/* ----------- Save And Publish ----------- */} -
); } diff --git a/client/src/containers/Sales/Invoice/InvoiceForm.js b/client/src/containers/Sales/Invoice/InvoiceForm.js index fc20481b3..162213a4f 100644 --- a/client/src/containers/Sales/Invoice/InvoiceForm.js +++ b/client/src/containers/Sales/Invoice/InvoiceForm.js @@ -186,7 +186,6 @@ function InvoiceForm({ intent: Intent.SUCCESS, }); setSubmitting(false); - resetForm(); if (submitPayload.redirect) { history.push('/invoices'); @@ -230,7 +229,7 @@ function InvoiceForm({ }, [changePageSubtitle], ); - + return (
)} diff --git a/client/src/containers/Sales/PaymentReceive/PaymentReceiveFloatingActions.js b/client/src/containers/Sales/PaymentReceive/PaymentReceiveFloatingActions.js index 2f02013c4..318ea4a9e 100644 --- a/client/src/containers/Sales/PaymentReceive/PaymentReceiveFloatingActions.js +++ b/client/src/containers/Sales/PaymentReceive/PaymentReceiveFloatingActions.js @@ -46,19 +46,28 @@ export default function PaymentReceiveFormFloatingActions({ onSubmitForm(); saveInvoke(onSubmitClick, event, { redirect: false, + resetForm: true, + }); + }; + + const handleSubmitContinueEditingBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, }); }; return (
+ {/* ----------- Save and New ----------- */} - {/* ----------- Save and New ----------- */}
); } diff --git a/client/src/containers/Sales/PaymentReceive/PaymentReceiveForm.js b/client/src/containers/Sales/PaymentReceive/PaymentReceiveForm.js index 469e0f616..2dd56ece5 100644 --- a/client/src/containers/Sales/PaymentReceive/PaymentReceiveForm.js +++ b/client/src/containers/Sales/PaymentReceive/PaymentReceiveForm.js @@ -190,11 +190,13 @@ function PaymentReceiveForm({ intent: Intent.SUCCESS, }); setSubmitting(false); - resetForm(); if (submitPayload.redirect) { history.push('/payment-receives'); } + if (submitPayload.resetForm) { + resetForm(); + } }; // Handle request response errors. const onError = (errors) => { @@ -366,7 +368,7 @@ function PaymentReceiveForm({ const handleCancelClick = useCallback(() => { history.goBack(); }, [history]); - + return (
diff --git a/client/src/containers/Sales/Receipt/ReceiptFormFloatingActions.js b/client/src/containers/Sales/Receipt/ReceiptFormFloatingActions.js index c81044338..587ba2793 100644 --- a/client/src/containers/Sales/Receipt/ReceiptFormFloatingActions.js +++ b/client/src/containers/Sales/Receipt/ReceiptFormFloatingActions.js @@ -14,7 +14,7 @@ import { useFormikContext } from 'formik'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; import { saveInvoke } from 'utils'; -import { Icon } from 'components'; +import { If, Icon } from 'components'; /** * Receipt floating actions bar. @@ -22,21 +22,60 @@ import { Icon } from 'components'; export default function ReceiptFormFloatingActions({ isSubmitting, receiptId, + receiptPublished, onSubmitClick, onCancelClick, onClearClick, }) { const { resetForm, submitForm } = useFormikContext(); - const handleSubmitAndNewClick = useCallback( - (event) => { - submitForm(); - saveInvoke(onSubmitClick, event, { - redirect: false, - }); - }, - [submitForm], - ); + const handleSubmitPublishBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: true, + }); + }; + + const handleSubmitPublishAndNewBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + resetForm: true, + }); + }; + + const handleSubmitPublishContinueEditingBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); + }; + + const handleSubmitDraftBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + publish: false, + }); + }; + + const handleSubmitDraftAndNewBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + resetForm: true, + }); + }; + + const handleSubmitDraftContinueEditingBtnClick = (event) => { + submitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + }); + }; const handleCancelBtnClick = (event) => { saveInvoke(onCancelClick, event); @@ -49,51 +88,114 @@ export default function ReceiptFormFloatingActions({ return (
- - {/* ----------- Save and New ----------- */} -
); } From 7c16cb2b2490b7ca6ec9a533dd5ffbfec4850353 Mon Sep 17 00:00:00 2001 From: elforjani3 Date: Tue, 24 Nov 2020 21:07:00 +0200 Subject: [PATCH 02/17] Fix: Estimate &MakeJournal DataTypes. --- .../Accounting/MakeJournalEntriesForm.js | 44 +++++-------------- .../MakeJournalEntriesForm.schema.js | 5 ++- .../Sales/Estimate/EstimateForm.schema.js | 1 - 3 files changed, 13 insertions(+), 37 deletions(-) diff --git a/client/src/containers/Accounting/MakeJournalEntriesForm.js b/client/src/containers/Accounting/MakeJournalEntriesForm.js index 988bceb94..f910e4633 100644 --- a/client/src/containers/Accounting/MakeJournalEntriesForm.js +++ b/client/src/containers/Accounting/MakeJournalEntriesForm.js @@ -17,6 +17,11 @@ import MakeJournalEntriesHeader from './MakeJournalEntriesHeader'; import MakeJournalEntriesFooter from './MakeJournalEntriesFooter'; import MakeJournalEntriesTable from './MakeJournalEntriesTable'; +import { + CreateMakeJournalFormSchema, + EditMakeJournalFormSchema, +} from './MakeJournalEntriesForm.schema'; + import withJournalsActions from 'containers/Accounting/withJournalsActions'; import withManualJournalDetail from 'containers/Accounting/withManualJournalDetail'; import withAccountsActions from 'containers/Accounts/withAccountsActions'; @@ -77,6 +82,7 @@ function MakeJournalEntriesForm({ onFormSubmit, onCancelForm, }) { + const isNewMode = !manualJournalId; const { formatMessage } = useIntl(); const history = useHistory(); const [submitPayload, setSubmitPayload] = useState({}); @@ -126,39 +132,9 @@ function MakeJournalEntriesForm({ formatMessage, ]); - const validationSchema = Yup.object().shape({ - journal_number: Yup.string() - .required() - .min(1) - .max(255) - .label(formatMessage({ id: 'journal_number_' })), - journal_type: Yup.string() - .required() - .min(1) - .max(255) - .label(formatMessage({ id: 'journal_type' })), - date: Yup.date() - .required() - .label(formatMessage({ id: 'date' })), - currency_code: Yup.string(), - reference: Yup.string().min(1).max(255), - description: Yup.string().min(1).max(1024), - entries: Yup.array().of( - Yup.object().shape({ - credit: Yup.number().decimalScale(13).nullable(), - debit: Yup.number().decimalScale(13).nullable(), - account_id: Yup.number() - .nullable() - .when(['credit', 'debit'], { - is: (credit, debit) => credit || debit, - then: Yup.number().required(), - }), - contact_id: Yup.number().nullable(), - contact_type: Yup.string().nullable(), - note: Yup.string().max(255).nullable(), - }), - ), - }); + const validationSchema = isNewMode + ? CreateMakeJournalFormSchema + : EditMakeJournalFormSchema; const saveInvokeSubmit = useCallback( (payload) => { @@ -185,7 +161,7 @@ function MakeJournalEntriesForm({ date: moment(new Date()).format('YYYY-MM-DD'), description: '', reference: '', - status:'', + status: '', currency_code: '', entries: [...repeatValue(defaultEntry, 4)], }), diff --git a/client/src/containers/Accounting/MakeJournalEntriesForm.schema.js b/client/src/containers/Accounting/MakeJournalEntriesForm.schema.js index fb1add89f..546c899b5 100644 --- a/client/src/containers/Accounting/MakeJournalEntriesForm.schema.js +++ b/client/src/containers/Accounting/MakeJournalEntriesForm.schema.js @@ -4,7 +4,7 @@ import { DATATYPES_LENGTH } from 'common/dataTypes'; const Schema = Yup.object().shape({ journal_number: Yup.string() - .required() + // .required() .min(1) .max(DATATYPES_LENGTH.STRING) .label(formatMessage({ id: 'journal_number_' })), @@ -17,8 +17,9 @@ const Schema = Yup.object().shape({ .required() .label(formatMessage({ id: 'date' })), currency_code: Yup.string().max(3), - reference: Yup.string().min(1).max(DATATYPES_LENGTH.STRING), + reference: Yup.string().nullable().min(1).max(DATATYPES_LENGTH.STRING), description: Yup.string().min(1).max(DATATYPES_LENGTH.STRING), + status: Yup.boolean(), entries: Yup.array().of( Yup.object().shape({ credit: Yup.number().decimalScale(13).nullable(), diff --git a/client/src/containers/Sales/Estimate/EstimateForm.schema.js b/client/src/containers/Sales/Estimate/EstimateForm.schema.js index 9e64f31cd..d4b2ee6c4 100644 --- a/client/src/containers/Sales/Estimate/EstimateForm.schema.js +++ b/client/src/containers/Sales/Estimate/EstimateForm.schema.js @@ -13,7 +13,6 @@ const Schema = Yup.object().shape({ .required() .label(formatMessage({ id: 'expiration_date_' })), estimate_number: Yup.string() - .nullable() .max(DATATYPES_LENGTH.STRING) .label(formatMessage({ id: 'estimate_number_' })), reference: Yup.string().min(1).max(DATATYPES_LENGTH.STRING).nullable(), From 33827f8ed2446483e38865de87c2a66bf88a9330 Mon Sep 17 00:00:00 2001 From: elforjani3 Date: Wed, 25 Nov 2020 23:05:37 +0200 Subject: [PATCH 03/17] Fix :Forms Floating Actions. --- .../containers/Expenses/ExpenseDataTable.js | 4 +- .../Expenses/ExpenseFloatingActions.js | 2 +- client/src/containers/Expenses/ExpenseForm.js | 5 +- .../containers/Expenses/ExpenseForm.schema.js | 2 +- .../Sales/Estimate/EstimateFloatingActions.js | 2 +- .../Sales/Invoice/InvoiceFloatingActions.js | 2 +- .../Receipt/ReceiptFormFloatingActions.js | 2 +- server/src/models/Expense.js | 120 +++++++++--------- 8 files changed, 73 insertions(+), 66 deletions(-) diff --git a/client/src/containers/Expenses/ExpenseDataTable.js b/client/src/containers/Expenses/ExpenseDataTable.js index 6430ec87c..a8eea0755 100644 --- a/client/src/containers/Expenses/ExpenseDataTable.js +++ b/client/src/containers/Expenses/ExpenseDataTable.js @@ -124,7 +124,7 @@ function ExpensesDataTable({ text={formatMessage({ id: 'view_details' })} /> - + } text={formatMessage({ id: 'publish_expense' })} @@ -209,7 +209,7 @@ function ExpensesDataTable({ id: 'publish', Header: formatMessage({ id: 'publish' }), accessor: (r) => { - return r.published ? ( + return !!r.is_published ? ( diff --git a/client/src/containers/Expenses/ExpenseFloatingActions.js b/client/src/containers/Expenses/ExpenseFloatingActions.js index 84fc445ea..e66af0918 100644 --- a/client/src/containers/Expenses/ExpenseFloatingActions.js +++ b/client/src/containers/Expenses/ExpenseFloatingActions.js @@ -90,7 +90,7 @@ export default function ExpenseFloatingFooter({ return (
{/* ----------- Save And Publish ----------- */} - +
diff --git a/client/src/containers/Expenses/ExpenseForm.schema.js b/client/src/containers/Expenses/ExpenseForm.schema.js index f9a9615ce..fbf58521a 100644 --- a/client/src/containers/Expenses/ExpenseForm.schema.js +++ b/client/src/containers/Expenses/ExpenseForm.schema.js @@ -21,7 +21,7 @@ const Schema = Yup.object().shape({ .max(DATATYPES_LENGTH.TEXT) .nullable() .label(formatMessage({ id: 'description' })), - publish: Yup.boolean().label(formatMessage({ id: 'publish' })), + is_published: Yup.boolean(), categories: Yup.array().of( Yup.object().shape({ index: Yup.number().min(1).max(DATATYPES_LENGTH.INT_10).nullable(), diff --git a/client/src/containers/Sales/Estimate/EstimateFloatingActions.js b/client/src/containers/Sales/Estimate/EstimateFloatingActions.js index 8d6d5301d..d6df854ff 100644 --- a/client/src/containers/Sales/Estimate/EstimateFloatingActions.js +++ b/client/src/containers/Sales/Estimate/EstimateFloatingActions.js @@ -89,7 +89,7 @@ export default function EstimateFloatingActions({ return (
{/* ----------- Save And Publish ----------- */} - +
); } diff --git a/client/src/containers/Vendors/VendorFloatingActions.js b/client/src/containers/Vendors/VendorFloatingActions.js index 7e3216da7..3ad4ec27c 100644 --- a/client/src/containers/Vendors/VendorFloatingActions.js +++ b/client/src/containers/Vendors/VendorFloatingActions.js @@ -79,20 +79,20 @@ export default function VendorFloatingActions({ rightIcon={} /> - {/* ----------- Clear & Reset----------- */} -
); }