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

@@ -25,7 +25,12 @@ import withCurrentOrganization from 'containers/Organization/withCurrentOrganiza
import { AppToaster } from 'components';
import { compose, orderingLinesIndexes, transactionNumber } from 'utils';
import { useInvoiceFormContext } from './InvoiceFormProvider';
import { transformToEditForm, defaultInvoice, transformErrors } from './utils';
import {
transformToEditForm,
defaultInvoice,
transformErrors,
transformValueToRequest,
} from './utils';
/**
* Invoice form.
@@ -72,7 +77,7 @@ function InvoiceForm({
currency_code: base_currency,
}),
}),
[invoice, newInvoice, invoiceNumber, invoiceIncrementMode],
[invoice, newInvoice, invoiceNumber, invoiceIncrementMode, base_currency],
);
// Handles form submit.
@@ -93,15 +98,13 @@ function InvoiceForm({
setSubmitting(false);
return;
}
// Transformes the values of the form to request.
const form = {
...omit(values, ['invoice_no', 'invoice_no_manually']),
...(values.invoice_no_manually && {
invoice_no: values.invoice_no,
}),
...transformValueToRequest(values),
delivered: submitPayload.deliver,
from_estimate_id: estimateId,
entries: entries.map((entry) => ({ ...omit(entry, ['total']) })),
};
// Handle the request success.
const onSuccess = () => {
AppToaster.show({

View File

@@ -1,5 +1,7 @@
import React from 'react';
import moment from 'moment';
import { Intent } from '@blueprintjs/core';
import { omit } from 'lodash';
import {
compose,
transformToForm,
@@ -7,7 +9,6 @@ import {
transactionNumber,
} from 'utils';
import { useFormikContext } from 'formik';
import { Intent } from '@blueprintjs/core';
import { defaultFastFieldShouldUpdate } from 'utils';
import intl from 'react-intl-universal';
@@ -146,3 +147,20 @@ export const ITEMS_FILTER_ROLES_QUERY = JSON.stringify([
comparator: 'equals',
},
]);
/**
* Transformes the form values to request body values.
*/
export function transformValueToRequest(values) {
const entries = values.entries.filter(
(item) => item.item_id && item.quantity,
);
return {
...omit(values, ['invoice_no', 'invoice_no_manually']),
...(values.invoice_no_manually && {
invoice_no: values.invoice_no,
}),
entries: entries.map((entry) => ({ ...omit(entry, ['amount']) })),
delivered: false,
};
}