mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 06:40:31 +00:00
feat: disable auto applying credit payments
This commit is contained in:
@@ -276,9 +276,5 @@ export const susbcribers = () => {
|
|||||||
|
|
||||||
// Plaid
|
// Plaid
|
||||||
RecognizeSyncedBankTranasctions,
|
RecognizeSyncedBankTranasctions,
|
||||||
|
|
||||||
// Advanced Payments
|
|
||||||
AutoApplyUnearnedRevenueOnInvoiceCreated,
|
|
||||||
AutoApplyPrepardExpensesOnBillCreated
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ export class PaymentReceiveValidators {
|
|||||||
const invoicesIds = paymentReceiveEntries.map(
|
const invoicesIds = paymentReceiveEntries.map(
|
||||||
(e: IPaymentReceiveEntryDTO) => e.invoiceId
|
(e: IPaymentReceiveEntryDTO) => e.invoiceId
|
||||||
);
|
);
|
||||||
|
|
||||||
const storedInvoices = await SaleInvoice.query().whereIn('id', invoicesIds);
|
const storedInvoices = await SaleInvoice.query().whereIn('id', invoicesIds);
|
||||||
|
|
||||||
const storedInvoicesMap = new Map(
|
const storedInvoicesMap = new Map(
|
||||||
|
|||||||
@@ -25,14 +25,6 @@ export default class PaymentReceivesWriteGLEntriesSubscriber {
|
|||||||
events.paymentReceive.onCreated,
|
events.paymentReceive.onCreated,
|
||||||
this.handleWriteJournalEntriesOnceCreated
|
this.handleWriteJournalEntriesOnceCreated
|
||||||
);
|
);
|
||||||
bus.subscribe(
|
|
||||||
events.paymentReceive.onCreated,
|
|
||||||
this.handleWriteUnearnedRevenueGLEntriesOnCreated.bind(this)
|
|
||||||
);
|
|
||||||
bus.subscribe(
|
|
||||||
events.paymentReceive.onUnearnedRevenueApplied,
|
|
||||||
this.handleRewriteUnearnedRevenueGLEntriesOnApply
|
|
||||||
);
|
|
||||||
bus.subscribe(
|
bus.subscribe(
|
||||||
events.paymentReceive.onEdited,
|
events.paymentReceive.onEdited,
|
||||||
this.handleOverwriteJournalEntriesOnceEdited
|
this.handleOverwriteJournalEntriesOnceEdited
|
||||||
@@ -57,17 +49,6 @@ export default class PaymentReceivesWriteGLEntriesSubscriber {
|
|||||||
paymentReceiveId,
|
paymentReceiveId,
|
||||||
trx
|
trx
|
||||||
);
|
);
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles rewrite payment GL entries on unearned revenue payload.
|
|
||||||
* @param {PaymentReceiveUnearnedRevenueAppliedEventPayload} payload -
|
|
||||||
*/
|
|
||||||
private handleWriteUnearnedRevenueGLEntriesOnCreated = async ({
|
|
||||||
tenantId,
|
|
||||||
paymentReceiveId,
|
|
||||||
trx,
|
|
||||||
}: IPaymentReceiveCreatedPayload) => {
|
|
||||||
await this.paymentReceivedUnearnedGLEntries.writePaymentGLEntries(
|
await this.paymentReceivedUnearnedGLEntries.writePaymentGLEntries(
|
||||||
tenantId,
|
tenantId,
|
||||||
paymentReceiveId,
|
paymentReceiveId,
|
||||||
@@ -75,22 +56,6 @@ export default class PaymentReceivesWriteGLEntriesSubscriber {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles rewrite unearned revenue GL entries on payment received applied.
|
|
||||||
* @param {PaymentReceiveUnearnedRevenueAppliedEventPayload} payload -
|
|
||||||
*/
|
|
||||||
private handleRewriteUnearnedRevenueGLEntriesOnApply = async ({
|
|
||||||
tenantId,
|
|
||||||
paymentReceiveId,
|
|
||||||
trx,
|
|
||||||
}: PaymentReceiveUnearnedRevenueAppliedEventPayload) => {
|
|
||||||
await this.paymentReceivedUnearnedGLEntries.rewritePaymentGLEntries(
|
|
||||||
tenantId,
|
|
||||||
paymentReceiveId,
|
|
||||||
trx
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle journal entries writing once the payment receive edited.
|
* Handle journal entries writing once the payment receive edited.
|
||||||
* @param {IPaymentReceiveEditedPayload} payload -
|
* @param {IPaymentReceiveEditedPayload} payload -
|
||||||
@@ -98,6 +63,7 @@ export default class PaymentReceivesWriteGLEntriesSubscriber {
|
|||||||
private handleOverwriteJournalEntriesOnceEdited = async ({
|
private handleOverwriteJournalEntriesOnceEdited = async ({
|
||||||
tenantId,
|
tenantId,
|
||||||
paymentReceive,
|
paymentReceive,
|
||||||
|
paymentReceiveId,
|
||||||
trx,
|
trx,
|
||||||
}: IPaymentReceiveEditedPayload) => {
|
}: IPaymentReceiveEditedPayload) => {
|
||||||
await this.paymentReceiveGLEntries.rewritePaymentGLEntries(
|
await this.paymentReceiveGLEntries.rewritePaymentGLEntries(
|
||||||
@@ -105,6 +71,11 @@ export default class PaymentReceivesWriteGLEntriesSubscriber {
|
|||||||
paymentReceive.id,
|
paymentReceive.id,
|
||||||
trx
|
trx
|
||||||
);
|
);
|
||||||
|
await this.paymentReceivedUnearnedGLEntries.rewritePaymentGLEntries(
|
||||||
|
tenantId,
|
||||||
|
paymentReceiveId,
|
||||||
|
trx
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ function PaymentMadeFormHeader() {
|
|||||||
<span class="big-amount__label">
|
<span class="big-amount__label">
|
||||||
<T id={'amount_received'} />
|
<T id={'amount_received'} />
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<h1 class="big-amount__number">
|
<h1 class="big-amount__number">
|
||||||
<Money amount={totalAmount} currency={currency_code} />
|
<Money amount={totalAmount} currency={currency_code} />
|
||||||
</h1>
|
</h1>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import React, { useMemo } from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
import { isEmpty, toSafeInteger } from 'lodash';
|
||||||
import {
|
import {
|
||||||
FormGroup,
|
FormGroup,
|
||||||
InputGroup,
|
InputGroup,
|
||||||
@@ -13,7 +14,6 @@ import {
|
|||||||
import { DateInput } from '@blueprintjs/datetime';
|
import { DateInput } from '@blueprintjs/datetime';
|
||||||
import { FastField, Field, useFormikContext, ErrorMessage } from 'formik';
|
import { FastField, Field, useFormikContext, ErrorMessage } from 'formik';
|
||||||
import { FormattedMessage as T, VendorsSelect } from '@/components';
|
import { FormattedMessage as T, VendorsSelect } from '@/components';
|
||||||
import { toSafeInteger } from 'lodash';
|
|
||||||
import { CLASSES } from '@/constants/classes';
|
import { CLASSES } from '@/constants/classes';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -115,10 +115,10 @@ function PaymentMadeFormHeaderFields({ organization: { base_currency } }) {
|
|||||||
</FastField>
|
</FastField>
|
||||||
|
|
||||||
{/* ------------ Full amount ------------ */}
|
{/* ------------ Full amount ------------ */}
|
||||||
<Field name={'full_amount'}>
|
<Field name={'amount'}>
|
||||||
{({
|
{({
|
||||||
form: {
|
form: {
|
||||||
values: { currency_code },
|
values: { currency_code, entries },
|
||||||
},
|
},
|
||||||
field: { value },
|
field: { value },
|
||||||
meta: { error, touched },
|
meta: { error, touched },
|
||||||
@@ -142,15 +142,17 @@ function PaymentMadeFormHeaderFields({ organization: { base_currency } }) {
|
|||||||
/>
|
/>
|
||||||
</ControlGroup>
|
</ControlGroup>
|
||||||
|
|
||||||
<Button
|
{!isEmpty(entries) && (
|
||||||
onClick={handleReceiveFullAmountClick}
|
<Button
|
||||||
className={'receive-full-amount'}
|
onClick={handleReceiveFullAmountClick}
|
||||||
small={true}
|
className={'receive-full-amount'}
|
||||||
minimal={true}
|
small={true}
|
||||||
>
|
minimal={true}
|
||||||
<T id={'receive_full_amount'} /> (
|
>
|
||||||
<Money amount={payableFullAmount} currency={currency_code} />)
|
<T id={'receive_full_amount'} /> (
|
||||||
</Button>
|
<Money amount={payableFullAmount} currency={currency_code} />)
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
|
|||||||
@@ -108,6 +108,15 @@ function PaymentReceiveForm({
|
|||||||
setSubmitting(true);
|
setSubmitting(true);
|
||||||
const exceededAmount = getExceededAmountFromValues(values);
|
const exceededAmount = getExceededAmountFromValues(values);
|
||||||
|
|
||||||
|
// Validates the amount should be bigger than zero.
|
||||||
|
if (values.amount <= 0) {
|
||||||
|
AppToaster.show({
|
||||||
|
message: intl.get('you_cannot_make_payment_with_zero_total_amount'),
|
||||||
|
intent: Intent.DANGER,
|
||||||
|
});
|
||||||
|
setSubmitting(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Show the confirm popup if the excessed amount bigger than zero and
|
// Show the confirm popup if the excessed amount bigger than zero and
|
||||||
// excess confirmation has not been confirmed yet.
|
// excess confirmation has not been confirmed yet.
|
||||||
if (exceededAmount > 0 && !isExcessConfirmed) {
|
if (exceededAmount > 0 && !isExcessConfirmed) {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
Button,
|
Button,
|
||||||
} from '@blueprintjs/core';
|
} from '@blueprintjs/core';
|
||||||
import { DateInput } from '@blueprintjs/datetime';
|
import { DateInput } from '@blueprintjs/datetime';
|
||||||
import { toSafeInteger } from 'lodash';
|
import { isEmpty, toSafeInteger } from 'lodash';
|
||||||
import { FastField, Field, useFormikContext, ErrorMessage } from 'formik';
|
import { FastField, Field, useFormikContext, ErrorMessage } from 'formik';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -128,7 +128,7 @@ export default function PaymentReceiveHeaderFields() {
|
|||||||
{({
|
{({
|
||||||
form: {
|
form: {
|
||||||
setFieldValue,
|
setFieldValue,
|
||||||
values: { currency_code },
|
values: { currency_code, entries },
|
||||||
},
|
},
|
||||||
field: { value, onChange },
|
field: { value, onChange },
|
||||||
meta: { error, touched },
|
meta: { error, touched },
|
||||||
@@ -152,15 +152,17 @@ export default function PaymentReceiveHeaderFields() {
|
|||||||
/>
|
/>
|
||||||
</ControlGroup>
|
</ControlGroup>
|
||||||
|
|
||||||
<Button
|
{!isEmpty(entries) && (
|
||||||
onClick={handleReceiveFullAmountClick}
|
<Button
|
||||||
className={'receive-full-amount'}
|
onClick={handleReceiveFullAmountClick}
|
||||||
small={true}
|
className={'receive-full-amount'}
|
||||||
minimal={true}
|
small={true}
|
||||||
>
|
minimal={true}
|
||||||
<T id={'receive_full_amount'} /> (
|
>
|
||||||
<Money amount={totalDueAmount} currency={currency_code} />)
|
<T id={'receive_full_amount'} /> (
|
||||||
</Button>
|
<Money amount={totalDueAmount} currency={currency_code} />)
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
|
|||||||
Reference in New Issue
Block a user