Fix :data types variables.

This commit is contained in:
elforjani3
2020-11-21 20:51:13 +02:00
parent b9e61461ae
commit 4b1f562587
17 changed files with 309 additions and 179 deletions

View File

@@ -0,0 +1,7 @@
export const DATATYPES_LENGTH = {
STRING: 255,
TEXT: 65535,
INT_10: 4294967295,
DECIMAL_13_3: 9999999999.999,
DECIMAL_15_5: 999999999999.999,
};

View File

@@ -0,0 +1,40 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
journal_number: Yup.string()
.required()
.min(1)
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'journal_number_' })),
journal_type: Yup.string()
.required()
.min(1)
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'journal_type' })),
date: Yup.date()
.required()
.label(formatMessage({ id: 'date' })),
currency_code: Yup.string().max(3),
reference: Yup.string().min(1).max(DATATYPES_LENGTH.STRING),
description: Yup.string().min(1).max(DATATYPES_LENGTH.STRING),
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(DATATYPES_LENGTH.TEXT).nullable(),
}),
),
});
export const CreateMakeJournalFormSchema = Schema;
export const EditMakeJournalFormSchema = Schema;

View File

@@ -0,0 +1,21 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
name: Yup.string()
.required()
.min(3)
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'account_name_' })),
code: Yup.string().digits().min(3).max(6),
account_type_id: Yup.number()
.nullable()
.required()
.label(formatMessage({ id: 'account_type_id' })),
description: Yup.string().min(3).max(DATATYPES_LENGTH.TEXT).nullable().trim(),
parent_account_id: Yup.number().nullable(),
});
export const CreateAccountFormSchema = Schema;
export const EditAccountFormSchema = Schema;

View File

@@ -30,7 +30,10 @@ import withAccountsActions from 'containers/Accounts/withAccountsActions';
import withAccountDetail from 'containers/Accounts/withAccountDetail';
import withAccounts from 'containers/Accounts/withAccounts';
import withDialogActions from 'containers/Dialog/withDialogActions';
import {
EditAccountFormSchema,
CreateAccountFormSchema,
} from './AccountForm.schema';
import { compose } from 'utils';
/**
@@ -61,19 +64,12 @@ function AccountFormDialogContent({
accountTypeId,
}) {
const { formatMessage } = useIntl();
const validationSchema = Yup.object().shape({
name: Yup.string()
.required()
.min(3)
.max(255)
.label(formatMessage({ id: 'account_name_' })),
code: Yup.string().digits().min(3).max(6),
account_type_id: Yup.number().nullable()
.required()
.label(formatMessage({ id: 'account_type_id' })),
description: Yup.string().min(3).max(512).nullable().trim(),
parent_account_id: Yup.number().nullable(),
});
const isNewMode = !accountId;
const validationSchema = isNewMode
? CreateAccountFormSchema
: EditAccountFormSchema;
const initialValues = useMemo(
() => ({
account_type_id: '',
@@ -194,18 +190,14 @@ function AccountFormDialogContent({
}, [closeDialog, dialogName]);
// Fetches accounts list.
const fetchAccountsList = useQuery(
'accounts-list',
() => requestFetchAccounts(),
const fetchAccountsList = useQuery('accounts-list', () =>
requestFetchAccounts(),
);
// Fetches accounts types.
const fetchAccountsTypes = useQuery(
'accounts-types-list',
async () => {
await requestFetchAccountTypes();
},
);
const fetchAccountsTypes = useQuery('accounts-types-list', async () => {
await requestFetchAccountTypes();
});
// Fetch the given account id on edit mode.
const fetchAccount = useQuery(

View File

@@ -1,11 +1,11 @@
import React, { useMemo, useCallback } from 'react';
import { Intent } from '@blueprintjs/core';
import * as Yup from 'yup';
import { useQuery, queryCache } from 'react-query';
import { FormattedMessage as T, useIntl } from 'react-intl';
import { Formik } from 'formik';
import { AppToaster, DialogContent } from 'components';
import ItemCategoryForm from './ItemCategoryForm';
import withItemCategories from 'containers/Items/withItemCategories';
import withItemCategoryDetail from 'containers/Items/withItemCategoryDetail';
import withItemCategoriesActions from 'containers/Items/withItemCategoriesActions';
@@ -14,8 +14,11 @@ import withAccounts from 'containers/Accounts/withAccounts';
import withAccountsActions from 'containers/Accounts/withAccountsActions';
import withDialogActions from 'containers/Dialog/withDialogActions';
import {
EditItemCategoryFormSchema,
CreateItemCategoryFormSchema,
} from './itemCategoryForm.schema';
import { compose, transformToForm } from 'utils';
import ItemCategoryForm from './ItemCategoryForm';
const defaultInitialValues = {
name: '',
@@ -70,17 +73,6 @@ function ItemCategoryFormDialogContent({
requestFetchAccounts(),
);
const validationSchema = Yup.object().shape({
name: Yup.string()
.required()
.label(formatMessage({ id: 'category_name_' })),
parent_category_id: Yup.number().nullable(),
cost_account_id: Yup.number().nullable(),
sell_account_id: Yup.number().nullable(),
inventory_account_id: Yup.number().nullable(),
description: Yup.string().trim().nullable(),
});
const initialValues = useMemo(
() => ({
...defaultInitialValues,
@@ -131,7 +123,9 @@ function ItemCategoryFormDialogContent({
isLoading={fetchCategoriesList.isFetching || fetchAccountsList.isFetching}
>
<Formik
validationSchema={validationSchema}
validationSchema={
isNewMode ? CreateItemCategoryFormSchema : EditItemCategoryFormSchema
}
initialValues={initialValues}
onSubmit={handleFormSubmit}
>

View File

@@ -0,0 +1,18 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
name: Yup.string()
.required()
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'category_name_' })),
parent_category_id: Yup.number().nullable(),
cost_account_id: Yup.number().nullable(),
sell_account_id: Yup.number().nullable(),
inventory_account_id: Yup.number().nullable(),
description: Yup.string().trim().max(DATATYPES_LENGTH.TEXT).nullable(),
});
export const CreateItemCategoryFormSchema = Schema;
export const EditItemCategoryFormSchema = Schema;

View File

@@ -26,7 +26,10 @@ import withSettings from 'containers/Settings/withSettings';
import AppToaster from 'components/AppToaster';
import Dragzone from 'components/Dragzone';
import {
CreateExpenseFormSchema,
EditExpenseFormSchema,
} from './ExpenseForm.schema';
import useMedia from 'hooks/useMedia';
import { compose, repeatValue, transformToForm } from 'utils';
@@ -64,8 +67,9 @@ function ExpenseForm({
onCancelForm,
}) {
const [payload, setPayload] = useState({});
const history = useHistory();
const isNewMode = !expenseId;
const { formatMessage } = useIntl();
const {
@@ -79,38 +83,9 @@ function ExpenseForm({
deleteCallback: requestDeleteMedia,
});
const validationSchema = Yup.object().shape({
beneficiary: Yup.string().label(formatMessage({ id: 'beneficiary' })),
payment_account_id: Yup.number()
.required()
.label(formatMessage({ id: 'payment_account_' })),
payment_date: Yup.date()
.required()
.label(formatMessage({ id: 'payment_date_' })),
reference_no: Yup.string().min(1).max(255),
currency_code: Yup.string()
.nullable()
.label(formatMessage({ id: 'currency_code' })),
description: Yup.string()
.trim()
.min(1)
.max(1024)
.label(formatMessage({ id: 'description' })),
publish: Yup.boolean().label(formatMessage({ id: 'publish' })),
categories: Yup.array().of(
Yup.object().shape({
index: Yup.number().min(1).max(1000).nullable(),
amount: Yup.number().decimalScale(13).nullable(),
expense_account_id: Yup.number()
.nullable()
.when(['amount'], {
is: (amount) => amount,
then: Yup.number().required(),
}),
description: Yup.string().nullable(),
}),
),
});
const validationSchema = isNewMode
? CreateExpenseFormSchema
: EditExpenseFormSchema;
const handleDropFiles = useCallback((_files) => {
setFiles(_files.filter((file) => file.uploaded === false));

View File

@@ -0,0 +1,40 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
beneficiary: Yup.string().label(formatMessage({ id: 'beneficiary' })),
payment_account_id: Yup.number()
.required()
.label(formatMessage({ id: 'payment_account_' })),
payment_date: Yup.date()
.required()
.label(formatMessage({ id: 'payment_date_' })),
reference_no: Yup.string().min(1).max(DATATYPES_LENGTH.STRING),
currency_code: Yup.string()
.nullable()
.max(3)
.label(formatMessage({ id: 'currency_code' })),
description: Yup.string()
.trim()
.min(1)
.max(DATATYPES_LENGTH.TEXT)
.label(formatMessage({ id: 'description' })),
publish: Yup.boolean().label(formatMessage({ id: 'publish' })),
categories: Yup.array().of(
Yup.object().shape({
index: Yup.number().min(1).max(DATATYPES_LENGTH.INT_10).nullable(),
amount: Yup.number().decimalScale(13).nullable(),
expense_account_id: Yup.number()
.nullable()
.when(['amount'], {
is: (amount) => amount,
then: Yup.number().required(),
}),
description: Yup.string().max(DATATYPES_LENGTH.TEXT).nullable(),
}),
),
});
export const CreateExpenseFormSchema = Schema;
export const EditExpenseFormSchema = Schema;

View File

@@ -1,16 +1,21 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
active: Yup.boolean(),
name: Yup.string()
.required()
.min(0)
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'item_name_' })),
type: Yup.string()
.trim()
.required()
.min(0)
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'item_type_' })),
sku: Yup.string().trim(),
sku: Yup.string().trim().min(0).max(DATATYPES_LENGTH.STRING),
cost_price: Yup.number().when(['purchasable'], {
is: true,
then: Yup.number()
@@ -53,4 +58,4 @@ const Schema = Yup.object().shape({
});
export const CreateItemFormSchema = Schema;
export const EditItemFormSchema = Schema;
export const EditItemFormSchema = Schema;

View File

@@ -1,5 +1,6 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const BillFormSchema = Yup.object().shape({
vendor_id: Yup.number()
@@ -12,22 +13,24 @@ const BillFormSchema = Yup.object().shape({
.required()
.label(formatMessage({ id: 'due_date_' })),
bill_number: Yup.string()
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'bill_number_' })),
reference_no: Yup.string().nullable().min(1).max(255),
reference_no: Yup.string().nullable().min(1).max(DATATYPES_LENGTH.STRING),
note: Yup.string()
.trim()
.min(1)
.max(1024)
.max(DATATYPES_LENGTH.TEXT)
.label(formatMessage({ id: 'note' })),
entries: Yup.array().of(
Yup.object().shape({
quantity: Yup.number()
.nullable()
.max(DATATYPES_LENGTH.INT_10)
.when(['rate'], {
is: (rate) => rate,
then: Yup.number().required(),
}),
rate: Yup.number().nullable(),
rate: Yup.number().nullable().max(DATATYPES_LENGTH.INT_10),
item_id: Yup.number()
.nullable()
.when(['quantity', 'rate'], {
@@ -35,8 +38,8 @@ const BillFormSchema = Yup.object().shape({
then: Yup.number().required(),
}),
total: Yup.number().nullable(),
discount: Yup.number().nullable().min(0).max(100),
description: Yup.string().nullable(),
discount: Yup.number().nullable().min(0).max(DATATYPES_LENGTH.INT_10),
description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT),
}),
),
});
@@ -44,7 +47,4 @@ const BillFormSchema = Yup.object().shape({
const CreateBillFormSchema = BillFormSchema;
const EditBillFormSchema = BillFormSchema;
export {
CreateBillFormSchema,
EditBillFormSchema,
};
export { CreateBillFormSchema, EditBillFormSchema };

View File

@@ -21,7 +21,10 @@ import withPaymentMadeDetail from './withPaymentMadeDetail';
import withPaymentMade from './withPaymentMade';
import withSettings from 'containers/Settings/withSettings';
import withDashboardActions from 'containers/Dashboard/withDashboardActions';
import {
EditPaymentMadeFormSchema,
CreatePaymentMadeFormSchema,
} from './PaymentMadeForm.schema';
import { compose, orderingLinesIndexes } from 'utils';
const ERRORS = {
@@ -73,50 +76,27 @@ function PaymentMadeForm({
}) {
const history = useHistory();
const { formatMessage } = useIntl();
const isNewMode = !paymentMadeId;
const [amountChangeAlert, setAmountChangeAlert] = useState(false);
const [clearLinesAlert, setClearLinesAlert] = useState(false);
const [clearFormAlert, setClearFormAlert] = useState(false);
const [fullAmount, setFullAmount] = useState(null);
const [localPaymentEntries, setLocalPaymentEntries] = useState(paymentMadeEntries);
const [localPaymentEntries, setLocalPaymentEntries] = useState(
paymentMadeEntries,
);
useEffect(() => {
if (localPaymentEntries !== paymentMadeEntries) {
setLocalPaymentEntries(paymentMadeEntries);
}
}, [localPaymentEntries, paymentMadeEntries])
}, [localPaymentEntries, paymentMadeEntries]);
// Yup validation schema.
const validationSchema = Yup.object().shape({
vendor_id: Yup.string()
.label(formatMessage({ id: 'vendor_name_' }))
.required(),
payment_date: Yup.date()
.required()
.label(formatMessage({ id: 'payment_date_' })),
payment_account_id: Yup.number()
.required()
.label(formatMessage({ id: 'payment_account_' })),
payment_number: Yup.string()
.label(formatMessage({ id: 'payment_no_' })),
reference: Yup.string().min(1).max(255).nullable(),
description: Yup.string(),
entries: Yup.array().of(
Yup.object().shape({
id: Yup.number().nullable(),
due_amount: Yup.number().nullable(),
payment_amount: Yup.number().nullable().max(Yup.ref('due_amount')),
bill_id: Yup.number()
.nullable()
.when(['payment_amount'], {
is: (payment_amount) => payment_amount,
then: Yup.number().required(),
}),
}),
),
});
const validationSchema = isNewMode
? CreatePaymentMadeFormSchema
: EditPaymentMadeFormSchema;
// Form initial values.
const initialValues = useMemo(
() => ({
@@ -246,7 +226,7 @@ function PaymentMadeForm({
const resetEntriesPaymentAmount = (entries) => {
return entries.map((entry) => ({ ...entry, payment_amount: 0 }));
}
};
// Handle fetch success of vendor bills entries.
const handleFetchEntriesSuccess = useCallback(
(entries) => {
@@ -307,10 +287,13 @@ function PaymentMadeForm({
changePageSubtitle(paymentNumber);
};
// Clear page subtitle before once page leave.
useEffect(() => () => {
changePageSubtitle('')
}, [changePageSubtitle]);
// Clear page subtitle before once page leave.
useEffect(
() => () => {
changePageSubtitle('');
},
[changePageSubtitle],
);
const fullAmountPaid = useMemo(
() => sumBy(values.entries, 'payment_amount'),
@@ -385,9 +368,7 @@ function PaymentMadeForm({
<p>Are you sure you want to clear this transaction?</p>
</Alert>
<PaymentMadeFooter
getFieldProps={getFieldProps}
/>
<PaymentMadeFooter getFieldProps={getFieldProps} />
<PaymentMadeFloatingActions
isSubmitting={isSubmitting}

View File

@@ -0,0 +1,36 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
vendor_id: Yup.string()
.label(formatMessage({ id: 'vendor_name_' }))
.required(),
payment_date: Yup.date()
.required()
.label(formatMessage({ id: 'payment_date_' })),
payment_account_id: Yup.number()
.required()
.label(formatMessage({ id: 'payment_account_' })),
payment_number: Yup.string()
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'payment_no_' })),
reference: Yup.string().min(1).max(DATATYPES_LENGTH.STRING).nullable(),
description: Yup.string().max(DATATYPES_LENGTH.TEXT),
entries: Yup.array().of(
Yup.object().shape({
id: Yup.number().nullable(),
due_amount: Yup.number().nullable(),
payment_amount: Yup.number().nullable().max(Yup.ref('due_amount')),
bill_id: Yup.number()
.nullable()
.when(['payment_amount'], {
is: (payment_amount) => payment_amount,
then: Yup.number().required(),
}),
}),
),
});
export const CreatePaymentMadeFormSchema = Schema;
export const EditPaymentMadeFormSchema = Schema;

View File

@@ -1,7 +1,8 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
const Schema = Yup.object().shape({
customer_id: Yup.number()
.label(formatMessage({ id: 'customer_name_' }))
.required(),
@@ -13,38 +14,40 @@ const Schema = Yup.object().shape({
.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(255).nullable(),
reference: Yup.string().min(1).max(DATATYPES_LENGTH.STRING).nullable(),
note: Yup.string()
.trim()
.min(1)
.max(1024)
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'note' })),
terms_conditions: Yup.string()
.trim()
.min(1)
.max(1024)
.max(DATATYPES_LENGTH.TEXT)
.label(formatMessage({ id: 'note' })),
entries: Yup.array().of(
Yup.object().shape({
quantity: Yup.number()
.nullable()
.max(DATATYPES_LENGTH.INT_10)
.when(['rate'], {
is: (rate) => rate,
then: Yup.number().required(),
}),
rate: Yup.number().nullable(),
rate: Yup.number().nullable().max(DATATYPES_LENGTH.INT_10),
item_id: Yup.number()
.nullable()
.when(['quantity', 'rate'], {
is: (quantity, rate) => quantity || rate,
then: Yup.number().required(),
}),
discount: Yup.number().nullable().min(0).max(100),
description: Yup.string().nullable(),
discount: Yup.number().nullable().min(0).max(DATATYPES_LENGTH.INT_10),
description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT),
}),
),
});
export const CreateEstimateFormSchema = Schema;
export const EditEstimateFormSchema = Schema;
export const EditEstimateFormSchema = Schema;

View File

@@ -1,5 +1,6 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
customer_id: Yup.string()
@@ -12,39 +13,40 @@ const Schema = Yup.object().shape({
.required()
.label(formatMessage({ id: 'due_date_' })),
invoice_no: Yup.string()
.label(formatMessage({ id: 'invoice_no_' })),
reference_no: Yup.string().min(1).max(255),
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'invoice_no_' })),
reference_no: Yup.string().min(1).max(DATATYPES_LENGTH.STRING),
status: Yup.string().required(),
invoice_message: Yup.string()
.trim()
.min(1)
.max(1024)
.max(DATATYPES_LENGTH.TEXT)
.label(formatMessage({ id: 'note' })),
terms_conditions: Yup.string()
.trim()
.min(1)
.max(1024)
.max(DATATYPES_LENGTH.TEXT)
.label(formatMessage({ id: 'note' })),
entries: Yup.array().of(
Yup.object().shape({
quantity: Yup.number()
.nullable()
.nullable().max(DATATYPES_LENGTH.INT_10)
.when(['rate'], {
is: (rate) => rate,
then: Yup.number().required(),
}),
rate: Yup.number().nullable(),
rate: Yup.number().nullable().max(DATATYPES_LENGTH.INT_10),
item_id: Yup.number()
.nullable()
.when(['quantity', 'rate'], {
is: (quantity, rate) => quantity || rate,
then: Yup.number().required(),
}),
discount: Yup.number().nullable().min(0).max(100),
description: Yup.string().nullable(),
discount: Yup.number().nullable().min(0).max(DATATYPES_LENGTH.INT_10),
description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT),
}),
),
});
export const CreateInvoiceFormSchema = Schema;
export const EditInvoiceFormSchema = Schema;
export const EditInvoiceFormSchema = Schema;

View File

@@ -26,6 +26,10 @@ import withPaymentReceiveDetail from './withPaymentReceiveDetail';
import withPaymentReceives from './withPaymentReceives';
import withSettings from 'containers/Settings/withSettings';
import withDashboardActions from 'containers/Dashboard/withDashboardActions';
import {
EditPaymentReceiveFormSchema,
CreatePaymentReceiveFormSchema,
} from './PaymentReceiveForm.schema';
import { AppToaster } from 'components';
import { compose } from 'utils';
@@ -64,7 +68,7 @@ function PaymentReceiveForm({
const [clearFormAlert, setClearFormAlert] = useState(false);
const { formatMessage } = useIntl();
const isNewMode = !paymentReceiveId;
const [localPaymentEntries, setLocalPaymentEntries] = useState(
paymentReceiveEntries,
);
@@ -96,37 +100,10 @@ function PaymentReceiveForm({
}, [localPaymentEntries, paymentReceiveEntries]);
// Form validation schema.
const validationSchema = Yup.object().shape({
customer_id: Yup.string()
.label(formatMessage({ id: 'customer_name_' }))
.required(),
payment_date: Yup.date()
.required()
.label(formatMessage({ id: 'payment_date_' })),
deposit_account_id: Yup.number()
.required()
.label(formatMessage({ id: 'deposit_account_' })),
full_amount: Yup.number().nullable(),
payment_receive_no: Yup.string().label(
formatMessage({ id: 'payment_receive_no_' }),
),
reference_no: Yup.string().min(1).max(255).nullable(),
description: Yup.string().nullable(),
entries: Yup.array().of(
Yup.object().shape({
id: Yup.number().nullable(),
due_amount: Yup.number().nullable(),
payment_amount: Yup.number().nullable().max(Yup.ref('due_amount')),
invoice_id: Yup.number()
.nullable()
.when(['payment_amount'], {
is: (payment_amount) => payment_amount,
then: Yup.number().required(),
}),
}),
),
});
const validationSchema = isNewMode
? CreatePaymentReceiveFormSchema
: EditPaymentReceiveFormSchema;
// Default payment receive entry.
const defaultPaymentReceiveEntry = {
id: null,
@@ -354,7 +331,6 @@ function PaymentReceiveForm({
changePageSubtitle,
]);
const handlePaymentReceiveNumberChanged = useCallback(
(payment_receive_no) => {
changePageSubtitle(`No.${payment_receive_no}`);

View File

@@ -0,0 +1,37 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
customer_id: Yup.string()
.label(formatMessage({ id: 'customer_name_' }))
.required(),
payment_date: Yup.date()
.required()
.label(formatMessage({ id: 'payment_date_' })),
deposit_account_id: Yup.number()
.required()
.label(formatMessage({ id: 'deposit_account_' })),
full_amount: Yup.number().nullable(),
payment_receive_no: Yup.string()
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'payment_receive_no_' })),
reference_no: Yup.string().min(1).max(DATATYPES_LENGTH.STRING).nullable(),
description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT),
entries: Yup.array().of(
Yup.object().shape({
id: Yup.number().nullable(),
due_amount: Yup.number().nullable(),
payment_amount: Yup.number().nullable().max(Yup.ref('due_amount')),
invoice_id: Yup.number()
.nullable()
.when(['payment_amount'], {
is: (payment_amount) => payment_amount,
then: Yup.number().required(),
}),
}),
),
});
export const CreatePaymentReceiveFormSchema = Schema;
export const EditPaymentReceiveFormSchema = Schema;

View File

@@ -1,5 +1,6 @@
import * as Yup from 'yup';
import { formatMessage } from 'services/intl';
import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({
customer_id: Yup.string()
@@ -10,38 +11,40 @@ const Schema = Yup.object().shape({
.label(formatMessage({ id: 'receipt_date_' })),
receipt_number: Yup.string()
.nullable()
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'receipt_no_' })),
deposit_account_id: Yup.number()
.required()
.label(formatMessage({ id: 'deposit_account_' })),
reference_no: Yup.string().min(1).max(255),
reference_no: Yup.string().min(1).max(DATATYPES_LENGTH.STRING),
receipt_message: Yup.string()
.trim()
.min(1)
.max(1024)
.max(DATATYPES_LENGTH.STRING)
.label(formatMessage({ id: 'receipt_message_' })),
statement: Yup.string()
.trim()
.min(1)
.max(1024)
.max(DATATYPES_LENGTH.TEXT)
.label(formatMessage({ id: 'note' })),
entries: Yup.array().of(
Yup.object().shape({
quantity: Yup.number()
.nullable()
.max(DATATYPES_LENGTH.INT_10)
.when(['rate'], {
is: (rate) => rate,
then: Yup.number().required(),
}),
rate: Yup.number().nullable(),
rate: Yup.number().nullable().max(DATATYPES_LENGTH.INT_10),
item_id: Yup.number()
.nullable()
.when(['quantity', 'rate'], {
is: (quantity, rate) => quantity || rate,
then: Yup.number().required(),
}),
discount: Yup.number().nullable().min(0).max(100),
description: Yup.string().nullable(),
discount: Yup.number().nullable().min(0).max(DATATYPES_LENGTH.INT_10),
description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT),
}),
),
});