mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-17 05:10:31 +00:00
fix: ensure items entries has one empty line atleast.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { sumBy } from 'lodash';
|
||||
import { sumBy, isEmpty, last } from 'lodash';
|
||||
import * as R from 'ramda';
|
||||
import { toSafeNumber } from 'utils';
|
||||
|
||||
/**
|
||||
@@ -36,4 +37,19 @@ export const ITEM_TYPE = {
|
||||
*/
|
||||
export function getEntriesTotal(entries) {
|
||||
return sumBy(entries, 'amount');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the given entries have enough empty line on the last.
|
||||
* @param {Object} defaultEntry - Default entry.
|
||||
* @param {Array} entries - Entries.
|
||||
* @return {Array}
|
||||
*/
|
||||
export const ensureEntriesHaveEmptyLine = R.curry((defaultEntry, entries) => {
|
||||
const lastEntry = last(entries);
|
||||
|
||||
if (isEmpty(lastEntry.account_id) || isEmpty(lastEntry.amount)) {
|
||||
return [...entries, defaultEntry];
|
||||
}
|
||||
return entries;
|
||||
});
|
||||
@@ -1,5 +1,6 @@
|
||||
import moment from 'moment';
|
||||
import intl from 'react-intl-universal';
|
||||
import * as R from 'ramda';
|
||||
import { Intent } from '@blueprintjs/core';
|
||||
import { AppToaster } from 'components';
|
||||
import {
|
||||
@@ -7,6 +8,10 @@ import {
|
||||
transformToForm,
|
||||
repeatValue,
|
||||
} from 'utils';
|
||||
import {
|
||||
updateItemsEntriesTotal,
|
||||
ensureEntriesHaveEmptyLine,
|
||||
} from 'containers/Entries/utils';
|
||||
|
||||
export const MIN_LINES_NUMBER = 4;
|
||||
|
||||
@@ -33,17 +38,23 @@ export const defaultBill = {
|
||||
};
|
||||
|
||||
export const transformToEditForm = (bill) => {
|
||||
const initialEntries = [
|
||||
...bill.entries.map((bill) => ({
|
||||
...transformToForm(bill, defaultBill.entries[0]),
|
||||
})),
|
||||
...repeatValue(
|
||||
defaultBill,
|
||||
Math.max(MIN_LINES_NUMBER - bill.entries.length, 0),
|
||||
),
|
||||
];
|
||||
const entries = R.compose(
|
||||
ensureEntriesHaveEmptyLine(defaultBillEntry),
|
||||
updateItemsEntriesTotal,
|
||||
)(initialEntries);
|
||||
|
||||
return {
|
||||
...transformToForm(bill, defaultBill),
|
||||
entries: [
|
||||
...bill.entries.map((bill) => ({
|
||||
...transformToForm(bill, defaultBill.entries[0]),
|
||||
})),
|
||||
...repeatValue(
|
||||
defaultBill,
|
||||
Math.max(MIN_LINES_NUMBER - bill.entries.length, 0),
|
||||
),
|
||||
],
|
||||
entries,
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
import React from 'react';
|
||||
import { useFormikContext } from 'formik';
|
||||
import moment from 'moment';
|
||||
import * as R from 'ramda';
|
||||
import {
|
||||
defaultFastFieldShouldUpdate,
|
||||
transactionNumber,
|
||||
repeatValue,
|
||||
transformToForm,
|
||||
} from 'utils';
|
||||
import {
|
||||
updateItemsEntriesTotal,
|
||||
ensureEntriesHaveEmptyLine,
|
||||
} from 'containers/Entries/utils';
|
||||
|
||||
export const MIN_LINES_NUMBER = 4;
|
||||
|
||||
@@ -32,9 +37,8 @@ export const defaultEstimate = {
|
||||
entries: [...repeatValue(defaultEstimateEntry, MIN_LINES_NUMBER)],
|
||||
};
|
||||
|
||||
export const transformToEditForm = (estimate) => ({
|
||||
...transformToForm(estimate, defaultEstimate),
|
||||
entries: [
|
||||
export const transformToEditForm = (estimate) => {
|
||||
const initialEntries = [
|
||||
...estimate.entries.map((estimate) => ({
|
||||
...transformToForm(estimate, defaultEstimateEntry),
|
||||
})),
|
||||
@@ -42,8 +46,17 @@ export const transformToEditForm = (estimate) => ({
|
||||
defaultEstimateEntry,
|
||||
Math.max(MIN_LINES_NUMBER - estimate.entries.length, 0),
|
||||
),
|
||||
],
|
||||
});
|
||||
];
|
||||
const entries = R.compose(
|
||||
ensureEntriesHaveEmptyLine(defaultEstimateEntry),
|
||||
updateItemsEntriesTotal,
|
||||
)(initialEntries);
|
||||
|
||||
return {
|
||||
...transformToForm(estimate, defaultEstimate),
|
||||
entries
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Syncs estimate number of the settings with the context form.
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
import React from 'react';
|
||||
import moment from 'moment';
|
||||
import { isEmpty } from 'lodash';
|
||||
import {
|
||||
compose,
|
||||
transformToForm,
|
||||
repeatValue,
|
||||
transactionNumber,
|
||||
} from 'utils';
|
||||
import { updateItemsEntriesTotal } from 'containers/Entries/utils';
|
||||
import { useFormikContext } from 'formik';
|
||||
import { Intent } from '@blueprintjs/core';
|
||||
|
||||
@@ -15,6 +13,10 @@ import { defaultFastFieldShouldUpdate } from 'utils';
|
||||
import intl from 'react-intl-universal';
|
||||
import { ERROR } from 'common/errors';
|
||||
import { AppToaster } from 'components';
|
||||
import {
|
||||
updateItemsEntriesTotal,
|
||||
ensureEntriesHaveEmptyLine,
|
||||
} from 'containers/Entries/utils';
|
||||
|
||||
export const MIN_LINES_NUMBER = 4;
|
||||
|
||||
@@ -47,7 +49,7 @@ export const defaultInvoice = {
|
||||
* Transform invoice to initial values in edit mode.
|
||||
*/
|
||||
export function transformToEditForm(invoice) {
|
||||
const entries = compose(updateItemsEntriesTotal)([
|
||||
const initialEntries = [
|
||||
...invoice.entries.map((invoice) => ({
|
||||
...transformToForm(invoice, defaultInvoiceEntry),
|
||||
})),
|
||||
@@ -55,7 +57,11 @@ export function transformToEditForm(invoice) {
|
||||
defaultInvoiceEntry,
|
||||
Math.max(MIN_LINES_NUMBER - invoice.entries.length, 0),
|
||||
),
|
||||
]);
|
||||
];
|
||||
const entries = compose(
|
||||
ensureEntriesHaveEmptyLine(defaultInvoiceEntry),
|
||||
updateItemsEntriesTotal,
|
||||
)(initialEntries);
|
||||
|
||||
return {
|
||||
...transformToForm(invoice, defaultInvoice),
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
import React from 'react';
|
||||
import { useFormikContext } from 'formik';
|
||||
import moment from 'moment';
|
||||
import * as R from 'ramda';
|
||||
import {
|
||||
defaultFastFieldShouldUpdate,
|
||||
transactionNumber,
|
||||
repeatValue,
|
||||
transformToForm,
|
||||
} from 'utils';
|
||||
import {
|
||||
updateItemsEntriesTotal,
|
||||
ensureEntriesHaveEmptyLine,
|
||||
} from 'containers/Entries/utils';
|
||||
|
||||
export const MIN_LINES_NUMBER = 4;
|
||||
|
||||
@@ -35,9 +40,8 @@ export const defaultReceipt = {
|
||||
/**
|
||||
* Transform to form in edit mode.
|
||||
*/
|
||||
export const transformToEditForm = (receipt) => ({
|
||||
...transformToForm(receipt, defaultReceipt),
|
||||
entries: [
|
||||
export const transformToEditForm = (receipt) => {
|
||||
const initialEntries = [
|
||||
...receipt.entries.map((entry) => ({
|
||||
...transformToForm(entry, defaultReceiptEntry),
|
||||
})),
|
||||
@@ -45,8 +49,17 @@ export const transformToEditForm = (receipt) => ({
|
||||
defaultReceiptEntry,
|
||||
Math.max(MIN_LINES_NUMBER - receipt.entries.length, 0),
|
||||
),
|
||||
],
|
||||
});
|
||||
];
|
||||
const entries = R.compose(
|
||||
ensureEntriesHaveEmptyLine(defaultReceiptEntry),
|
||||
updateItemsEntriesTotal,
|
||||
)(initialEntries);
|
||||
|
||||
return {
|
||||
...transformToForm(receipt, defaultReceipt),
|
||||
entries,
|
||||
};
|
||||
};
|
||||
|
||||
export const useObserveReceiptNoSettings = (prefix, nextNumber) => {
|
||||
const { setFieldValue } = useFormikContext();
|
||||
|
||||
Reference in New Issue
Block a user