diff --git a/client/src/containers/Purchases/Bill/BillForm.js b/client/src/containers/Purchases/Bill/BillForm.js index 254603b73..df9bc5b96 100644 --- a/client/src/containers/Purchases/Bill/BillForm.js +++ b/client/src/containers/Purchases/Bill/BillForm.js @@ -31,7 +31,7 @@ const defaultBill = { index: 0, item_id: '', rate: '', - discount: '', + discount: 0, quantity: 1, description: '', }; diff --git a/client/src/containers/Purchases/Bill/BillForm.schema.js b/client/src/containers/Purchases/Bill/BillForm.schema.js index fbd55e772..8814c9e6e 100644 --- a/client/src/containers/Purchases/Bill/BillForm.schema.js +++ b/client/src/containers/Purchases/Bill/BillForm.schema.js @@ -22,7 +22,7 @@ const BillFormSchema = Yup.object().shape({ .min(1) .max(DATATYPES_LENGTH.TEXT) .label(formatMessage({ id: 'note' })), - open: Yup.boolean().required(), + open: Yup.boolean(), entries: Yup.array().of( Yup.object().shape({ quantity: Yup.number() diff --git a/client/src/containers/Purchases/PaymentMades/PaymentMadeViewTabs.js b/client/src/containers/Purchases/PaymentMades/PaymentMadeViewTabs.js index fdb145a4a..4fa5d1f2c 100644 --- a/client/src/containers/Purchases/PaymentMades/PaymentMadeViewTabs.js +++ b/client/src/containers/Purchases/PaymentMades/PaymentMadeViewTabs.js @@ -1,5 +1,6 @@ import React, { useEffect, useRef } from 'react'; import { useHistory } from 'react-router'; +import { FormattedMessage as T } from 'react-intl'; import { Alignment, Navbar, NavbarGroup } from '@blueprintjs/core'; import { useParams, withRouter } from 'react-router-dom'; import { connect } from 'react-redux'; @@ -80,7 +81,7 @@ function PaymentMadeViewTabs({ } tabs={tabs} onNewViewTabClick={handleClickNewView} onChange={handleTabsChange} diff --git a/client/src/containers/Sales/Estimate/EstimateFloatingActions.js b/client/src/containers/Sales/Estimate/EstimateFloatingActions.js index 3864c01fc..1aa26f55d 100644 --- a/client/src/containers/Sales/Estimate/EstimateFloatingActions.js +++ b/client/src/containers/Sales/Estimate/EstimateFloatingActions.js @@ -102,11 +102,11 @@ export default function EstimateFloatingActions({ content={ } + text={} onClick={handleSubmitDeliverAndNewBtnClick} /> } + text={} onClick={handleSubmitDeliverContinueEditingBtnClick} /> diff --git a/client/src/containers/Sales/Estimate/EstimateForm.js b/client/src/containers/Sales/Estimate/EstimateForm.js index 03a90e7ce..11e779b1a 100644 --- a/client/src/containers/Sales/Estimate/EstimateForm.js +++ b/client/src/containers/Sales/Estimate/EstimateForm.js @@ -43,8 +43,8 @@ const MIN_LINES_NUMBER = 4; const defaultEstimate = { index: 0, item_id: '', - rate: 0, - discount: '', + rate: '', + discount: 0, quantity: 1, description: '', }; @@ -164,6 +164,8 @@ const EstimateForm = ({ values, { setSubmitting, setErrors, resetForm }, ) => { + setSubmitting(true); + const entries = values.entries.filter( (item) => item.item_id && item.quantity, ); @@ -211,7 +213,9 @@ const EstimateForm = ({ }; const onError = (errors) => { - handleErrors(errors, { setErrors }); + if (errors) { + handleErrors(errors, { setErrors }); + } setSubmitting(false); }; @@ -246,11 +250,13 @@ const EstimateForm = ({ ); return ( -
+
- {({ isSubmitting ,values }) => ( + {({ isSubmitting, values }) => (
- + !isBlank(quantity) && !isBlank(rate), then: Yup.number().required(), }), - discount: Yup.number().nullable().min(0).max(DATATYPES_LENGTH.INT_10), + discount: Yup.number().nullable().min(0).max(100), description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT), }), ), diff --git a/client/src/containers/Sales/Estimate/EstimateFormBody.js b/client/src/containers/Sales/Estimate/EstimateFormBody.js index b911d5b3c..a5b9b8636 100644 --- a/client/src/containers/Sales/Estimate/EstimateFormBody.js +++ b/client/src/containers/Sales/Estimate/EstimateFormBody.js @@ -3,13 +3,13 @@ import classNames from 'classnames'; import { CLASSES } from 'common/classes'; import EditableItemsEntriesTable from 'containers/Entries/EditableItemsEntriesTable'; -export default function EstimateFormBody() { - - +export default function EstimateFormBody({ defaultEstimate }) { return (
- - +
- ) -} \ No newline at end of file + ); +} diff --git a/client/src/containers/Sales/Estimate/EstimateFormHeader.js b/client/src/containers/Sales/Estimate/EstimateFormHeader.js index 20b4d57f1..ce65f575b 100644 --- a/client/src/containers/Sales/Estimate/EstimateFormHeader.js +++ b/client/src/containers/Sales/Estimate/EstimateFormHeader.js @@ -1,22 +1,22 @@ import React, { useMemo } from 'react'; -import { compose } from 'utils'; import classNames from 'classnames'; import { sumBy } from 'lodash'; import { useFormikContext } from 'formik'; import { CLASSES } from 'common/classes'; -import { PageFormBigNumber } from 'components'; - -import withCustomers from 'containers/Customers/withCustomers'; -import withDialogActions from 'containers/Dialog/withDialogActions'; - import EstimateFormHeaderFields from './EstimateFormHeaderFields'; +import { PageFormBigNumber } from 'components'; +import withSettings from 'containers/Settings/withSettings'; +import { compose } from 'utils'; // Estimate form top header. function EstimateFormHeader({ // #ownProps onEstimateNumberChanged, + + // #withSettings + baseCurrency, }) { const { values } = useFormikContext(); @@ -33,15 +33,14 @@ function EstimateFormHeader({
); } export default compose( - withCustomers(({ customers }) => ({ - customers, + withSettings(({ organizationSettings }) => ({ + baseCurrency: organizationSettings?.baseCurrency, })), - withDialogActions, )(EstimateFormHeader); diff --git a/client/src/containers/Sales/Estimate/EstimateFormHeaderFields.js b/client/src/containers/Sales/Estimate/EstimateFormHeaderFields.js index 61dc0e2da..2f343d5e1 100644 --- a/client/src/containers/Sales/Estimate/EstimateFormHeaderFields.js +++ b/client/src/containers/Sales/Estimate/EstimateFormHeaderFields.js @@ -83,7 +83,7 @@ function EstimateFormHeader({ {...momentFormatter('YYYY/MM/DD')} value={tansformDateValue(value)} onChange={handleDateChange((formattedDate) => { - form.setFieldValue('estimate_date', formatMessage); + form.setFieldValue('estimate_date', formattedDate); })} popoverProps={{ position: Position.BOTTOM, minimal: true }} inputProps={{ diff --git a/client/src/containers/Sales/Invoice/InvoiceForm.js b/client/src/containers/Sales/Invoice/InvoiceForm.js index aef1cf6f4..fa8bf7a0e 100644 --- a/client/src/containers/Sales/Invoice/InvoiceForm.js +++ b/client/src/containers/Sales/Invoice/InvoiceForm.js @@ -44,7 +44,7 @@ const defaultInvoice = { index: 0, item_id: '', rate: '', - discount: '', + discount: 0, quantity: 1, description: '', }; diff --git a/client/src/containers/Sales/Invoice/InvoiceForm.schema.js b/client/src/containers/Sales/Invoice/InvoiceForm.schema.js index e57da8896..9f16449ff 100644 --- a/client/src/containers/Sales/Invoice/InvoiceForm.schema.js +++ b/client/src/containers/Sales/Invoice/InvoiceForm.schema.js @@ -17,7 +17,7 @@ const Schema = Yup.object().shape({ .max(DATATYPES_LENGTH.STRING) .label(formatMessage({ id: 'invoice_no_' })), reference_no: Yup.string().min(1).max(DATATYPES_LENGTH.STRING), - delivered: Yup.boolean().required(), + delivered: Yup.boolean(), invoice_message: Yup.string() .trim() .min(1) @@ -43,7 +43,7 @@ const Schema = Yup.object().shape({ is: (quantity, rate) => !isBlank(quantity) && !isBlank(rate), then: Yup.number().required(), }), - discount: Yup.number().nullable().min(0).max(DATATYPES_LENGTH.INT_10), + discount: Yup.number().nullable().min(0).max(100), description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT), }), ), diff --git a/client/src/containers/Sales/Invoice/InvoiceFormHeader.js b/client/src/containers/Sales/Invoice/InvoiceFormHeader.js index 671dc262f..f0809033d 100644 --- a/client/src/containers/Sales/Invoice/InvoiceFormHeader.js +++ b/client/src/containers/Sales/Invoice/InvoiceFormHeader.js @@ -4,16 +4,20 @@ import { sumBy } from 'lodash'; import { useFormikContext } from 'formik'; import { CLASSES } from 'common/classes'; - import InvoiceFormHeaderFields from './InvoiceFormHeaderFields'; + import { PageFormBigNumber } from 'components'; +import withSettings from 'containers/Settings/withSettings'; +import { compose } from 'redux'; /** * Invoice form header section. */ -export default function InvoiceFormHeader({ +function InvoiceFormHeader({ // #ownProps onInvoiceNumberChanged, + // #withSettings + baseCurrency, }) { const { values } = useFormikContext(); @@ -30,8 +34,13 @@ export default function InvoiceFormHeader({
); } +export default compose( + withSettings(({ organizationSettings }) => ({ + baseCurrency: organizationSettings?.baseCurrency, + })), +)(InvoiceFormHeader); diff --git a/client/src/containers/Sales/PaymentReceive/PaymentReceiveViewTabs.js b/client/src/containers/Sales/PaymentReceive/PaymentReceiveViewTabs.js index e5db3145c..00a476b98 100644 --- a/client/src/containers/Sales/PaymentReceive/PaymentReceiveViewTabs.js +++ b/client/src/containers/Sales/PaymentReceive/PaymentReceiveViewTabs.js @@ -2,6 +2,7 @@ import React, { useEffect, useRef } from 'react'; import { useHistory } from 'react-router'; import { Alignment, Navbar, NavbarGroup } from '@blueprintjs/core'; import { useParams, withRouter } from 'react-router-dom'; +import { FormattedMessage as T } from 'react-intl'; import { connect } from 'react-redux'; import { pick, debounce } from 'lodash'; @@ -82,8 +83,8 @@ function PaymentReceiveViewTabs({ } onNewViewTabClick={handleClickNewView} onChange={handleTabsChange} /> diff --git a/client/src/containers/Sales/Receipt/ReceiptForm.js b/client/src/containers/Sales/Receipt/ReceiptForm.js index 4661ececf..f0bd79b68 100644 --- a/client/src/containers/Sales/Receipt/ReceiptForm.js +++ b/client/src/containers/Sales/Receipt/ReceiptForm.js @@ -267,7 +267,7 @@ function ReceiptForm({ onReceiptNumberChanged={handleReceiptNumberChanged} /> - + - + - ) -} \ No newline at end of file + ); +} diff --git a/client/src/containers/Sales/Receipt/ReceiptFormHeader.js b/client/src/containers/Sales/Receipt/ReceiptFormHeader.js index 5b1c9796d..38e7ea290 100644 --- a/client/src/containers/Sales/Receipt/ReceiptFormHeader.js +++ b/client/src/containers/Sales/Receipt/ReceiptFormHeader.js @@ -7,10 +7,17 @@ import { CLASSES } from 'common/classes'; import ReceiptFormHeaderFields from './ReceiptFormHeaderFields'; import { PageFormBigNumber } from 'components'; +import withSettings from 'containers/Settings/withSettings'; +import { compose } from 'redux'; -export default function ReceiptFormHeader({ +/** + * Receipt form header section. + */ +function ReceiptFormHeader({ // #ownProps onReceiptNumberChanged, + // #withSettings + baseCurrency, }) { const { values } = useFormikContext(); @@ -27,8 +34,14 @@ export default function ReceiptFormHeader({ ); } + +export default compose( + withSettings(({ organizationSettings }) => ({ + baseCurrency: organizationSettings?.baseCurrency, + })), +)(ReceiptFormHeader); diff --git a/client/src/lang/en/index.js b/client/src/lang/en/index.js index 643983c87..8a825ad04 100644 --- a/client/src/lang/en/index.js +++ b/client/src/lang/en/index.js @@ -928,4 +928,5 @@ export default { 'Are you sure you want to activate this item? You will be able to inactivate it later', inactivate_item: 'Inactivate Item', activate_item: 'Activate Item', + all_payments:'All Payments' };