From 9302a4e68e34899ec7a57ca93c6a3ec13fefe007 Mon Sep 17 00:00:00 2001 From: elforjani3 Date: Sat, 7 Nov 2020 15:01:22 +0200 Subject: [PATCH] Fix :Conditions within Entries items --- .../src/containers/Purchases/Bill/BillForm.js | 32 +++++++++++++++---- .../containers/Sales/Estimate/EstimateForm.js | 16 ++++++++-- .../containers/Sales/Invoice/InvoiceForm.js | 20 +++++++++--- .../containers/Sales/Receipt/ReceiptForm.js | 15 ++++++++- client/src/lang/en/index.js | 2 ++ 5 files changed, 71 insertions(+), 14 deletions(-) diff --git a/client/src/containers/Purchases/Bill/BillForm.js b/client/src/containers/Purchases/Bill/BillForm.js index 4c1b838ba..bf8d7087c 100644 --- a/client/src/containers/Purchases/Bill/BillForm.js +++ b/client/src/containers/Purchases/Bill/BillForm.js @@ -11,7 +11,7 @@ import moment from 'moment'; import { Intent } from '@blueprintjs/core'; import classNames from 'classnames'; import { FormattedMessage as T, useIntl } from 'react-intl'; -import { pick } from 'lodash'; +import { pick, sumBy } from 'lodash'; import { CLASSES } from 'common/classes'; import BillFormHeader from './BillFormHeader'; @@ -215,11 +215,25 @@ function BillForm({ ...initialValues, }, onSubmit: (values, { setSubmitting, setErrors, resetForm }) => { - setSubmitting(true); + const entries = values.entries.filter( + (item) => item.item_id && item.quantity, + ); + const totalQuantity = sumBy(entries, (entry) => parseInt(entry.quantity)); + + if (totalQuantity === 0) { + AppToaster.show({ + message: formatMessage({ + id: 'quantity_cannot_be_zero_or_empty', + }), + intent: Intent.DANGER, + }); + setSubmitting(false); + return; + } const form = { ...values, - entries: values.entries.filter((item) => item.item_id && item.quantity), + entries, }; const requestForm = { ...form }; if (bill && bill.id) { @@ -311,16 +325,20 @@ function BillForm({ }, []); // Clear page subtitle once unmount bill form page. - useEffect(() => () => { - changePageSubtitle(''); - }, [changePageSubtitle]); + useEffect( + () => () => { + changePageSubtitle(''); + }, + [changePageSubtitle], + ); return (
+ onBillNumberChanged={handleBillNumberChanged} + /> item.item_id && item.quantity, ); + + const totalQuantity = sumBy(entries, (entry) => parseInt(entry.quantity)); + + if (totalQuantity === 0) { + AppToaster.show({ + message: formatMessage({ + id: 'quantity_cannot_be_zero_or_empty', + }), + intent: Intent.DANGER, + }); + setSubmitting(false); + return; + } const form = { ...values, entries, @@ -277,7 +290,6 @@ const EstimateForm = ({ } }, }); - useEffect(() => { formik.setFieldValue('estimate_number', estimateNumber); }, [estimateNumber]); diff --git a/client/src/containers/Sales/Invoice/InvoiceForm.js b/client/src/containers/Sales/Invoice/InvoiceForm.js index be611ec40..bee436764 100644 --- a/client/src/containers/Sales/Invoice/InvoiceForm.js +++ b/client/src/containers/Sales/Invoice/InvoiceForm.js @@ -10,7 +10,7 @@ import { useFormik } from 'formik'; import moment from 'moment'; import { Intent, FormGroup, TextArea } from '@blueprintjs/core'; import { FormattedMessage as T, useIntl } from 'react-intl'; -import { pick } from 'lodash'; +import { pick, sumBy } from 'lodash'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; @@ -97,8 +97,7 @@ function InvoiceForm({ due_date: Yup.date() .required() .label(formatMessage({ id: 'due_date_' })), - invoice_no: Yup.string() - .label(formatMessage({ id: 'invoice_no_' })), + invoice_no: Yup.string().label(formatMessage({ id: 'invoice_no_' })), reference_no: Yup.string().min(1).max(255), status: Yup.string().required(), invoice_message: Yup.string() @@ -127,7 +126,7 @@ function InvoiceForm({ is: (quantity, rate) => quantity || rate, then: Yup.number().required(), }), - discount: Yup.number().nullable().min(0).max(100), + discount: Yup.number().nullable().min(0).max(100), description: Yup.string().nullable(), }), ), @@ -232,6 +231,18 @@ function InvoiceForm({ const entries = values.entries.filter( (item) => item.item_id && item.quantity, ); + const totalQuantity = sumBy(entries, (entry) => parseInt(entry.quantity)); + + if (totalQuantity === 0) { + AppToaster.show({ + message: formatMessage({ + id: 'quantity_cannot_be_zero_or_empty', + }), + intent: Intent.DANGER, + }); + setSubmitting(false); + return; + } const form = { ...values, entries, @@ -279,6 +290,7 @@ function InvoiceForm({ } }, }); + useEffect(() => { formik.setFieldValue('invoice_no', invoiceNumber); }, [invoiceNumber]); diff --git a/client/src/containers/Sales/Receipt/ReceiptForm.js b/client/src/containers/Sales/Receipt/ReceiptForm.js index eeb3afc7d..93e9a2414 100644 --- a/client/src/containers/Sales/Receipt/ReceiptForm.js +++ b/client/src/containers/Sales/Receipt/ReceiptForm.js @@ -11,7 +11,7 @@ import { useFormik } from 'formik'; import moment from 'moment'; import { Intent, FormGroup, TextArea } from '@blueprintjs/core'; import { FormattedMessage as T, useIntl } from 'react-intl'; -import { pick } from 'lodash'; +import { pick,sumBy } from 'lodash'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; @@ -229,6 +229,19 @@ function ReceiptForm({ const entries = values.entries.filter( (item) => item.item_id && item.quantity, ); + + const totalQuantity = sumBy(entries, (entry) => parseInt(entry.quantity)); + + if (totalQuantity === 0) { + AppToaster.show({ + message: formatMessage({ + id: 'quantity_cannot_be_zero_or_empty', + }), + intent: Intent.DANGER, + }); + setSubmitting(false); + return; + } const form = { ...values, entries, diff --git a/client/src/lang/en/index.js b/client/src/lang/en/index.js index 2793350a2..d9ba48e51 100644 --- a/client/src/lang/en/index.js +++ b/client/src/lang/en/index.js @@ -789,4 +789,6 @@ export default { sale_invoice_number_is_exists: 'Sale invoice number is exists', bill_number_exists:'Bill number exists', ok: 'Ok!', + quantity_cannot_be_zero_or_empty: 'Quantity cannot be zero or empty.', + };