BIG-125: prevent items entries from send amount computed attribute.

This commit is contained in:
a.bouhuolia
2021-09-28 18:37:10 +02:00
parent 96269ccafb
commit 0aca6d9af7
10 changed files with 225 additions and 100 deletions

View File

@@ -2,12 +2,11 @@ import React, { useMemo } from 'react';
import { Formik, Form } from 'formik';
import { Intent } from '@blueprintjs/core';
import intl from 'react-intl-universal';
import { omit, sumBy, isEmpty } from 'lodash';
import { sumBy, isEmpty } from 'lodash';
import classNames from 'classnames';
import { useHistory } from 'react-router-dom';
import { CLASSES } from 'common/classes';
import { ERROR } from 'common/errors';
import {
EditReceiptFormSchema,
CreateReceiptFormSchema,
@@ -27,7 +26,12 @@ import withCurrentOrganization from 'containers/Organization/withCurrentOrganiza
import { AppToaster } from 'components';
import { compose, orderingLinesIndexes, transactionNumber } from 'utils';
import { transformToEditForm, defaultReceipt } from './utils';
import {
transformToEditForm,
defaultReceipt,
handleErrors,
transformFormValuesToRequest,
} from './utils';
/**
* Receipt form.
@@ -76,20 +80,6 @@ function ReceiptForm({
[receipt, preferredDepositAccount, nextReceiptNumber, receiptAutoIncrement],
);
// Transform response error to fields.
const handleErrors = (errors, { setErrors }) => {
if (errors.some((e) => e.type === ERROR.SALE_RECEIPT_NUMBER_NOT_UNIQUE)) {
setErrors({
receipt_number: intl.get('sale_receipt_number_not_unique'),
});
}
if (errors.some((e) => e.type === ERROR.SALE_RECEIPT_NO_IS_REQUIRED)) {
setErrors({
receipt_number: intl.get('receipt.field.error.receipt_number_required'),
});
}
};
// Handle the form submit.
const handleFormSubmit = (
values,
@@ -109,13 +99,8 @@ function ReceiptForm({
return;
}
const form = {
...omit(values, ['receipt_number_manually', 'receipt_number']),
...(values.receipt_number_manually && {
receipt_number: values.receipt_number,
currency_code: base_currency,
}),
...transformFormValuesToRequest(values),
closed: submitPayload.status,
entries: entries.map((entry) => ({ ...omit(entry, ['total']) })),
};
// Handle the request success.
const onSuccess = (response) => {

View File

@@ -2,6 +2,8 @@ import React from 'react';
import { useFormikContext } from 'formik';
import moment from 'moment';
import * as R from 'ramda';
import intl from 'react-intl-universal';
import { omit } from 'lodash';
import {
defaultFastFieldShouldUpdate,
transactionNumber,
@@ -37,6 +39,11 @@ export const defaultReceipt = {
entries: [...repeatValue(defaultReceiptEntry, MIN_LINES_NUMBER)],
};
const ERRORS = {
SALE_RECEIPT_NUMBER_NOT_UNIQUE: 'SALE_RECEIPT_NUMBER_NOT_UNIQUE',
SALE_RECEIPT_NO_IS_REQUIRED: 'SALE_RECEIPT_NO_IS_REQUIRED',
};
/**
* Transform to form in edit mode.
*/
@@ -99,3 +106,39 @@ export const customersFieldShouldUpdate = (newProps, oldProps) => {
defaultFastFieldShouldUpdate(newProps, oldProps)
);
};
/**
* Transform response error to fields.
*/
export const handleErrors = (errors, { setErrors }) => {
if (errors.some((e) => e.type === ERRORS.SALE_RECEIPT_NUMBER_NOT_UNIQUE)) {
setErrors({
receipt_number: intl.get('sale_receipt_number_not_unique'),
});
}
if (errors.some((e) => e.type === ERRORS.SALE_RECEIPT_NO_IS_REQUIRED)) {
setErrors({
receipt_number: intl.get('receipt.field.error.receipt_number_required'),
});
}
};
/**
* Transformes the form values to request body.
* @param {*} values
* @returns
*/
export const transformFormValuesToRequest = (values) => {
const entries = values.entries.filter(
(item) => item.item_id && item.quantity,
);
return {
...omit(values, ['receipt_number_manually', 'receipt_number']),
...(values.receipt_number_manually && {
receipt_number: values.receipt_number,
}),
entries: entries.map((entry) => ({ ...omit(entry, ['amount']) })),
closed: false,
};
};