fix(webapp): fix credit note and receipt auto-increment

This commit is contained in:
a.bouhuolia
2023-05-28 14:44:50 +02:00
parent c90ffed67f
commit 932750b62d
14 changed files with 63 additions and 19 deletions

View File

@@ -71,6 +71,8 @@ function MakeJournalEntriesForm({
} }
: { : {
...defaultManualJournal, ...defaultManualJournal,
// If the auto-increment mode is enabled, take the next journal
// number from the settings.
...(journalAutoIncrement && { ...(journalAutoIncrement && {
journal_number: journalNumber, journal_number: journalNumber,
}), }),
@@ -127,7 +129,6 @@ function MakeJournalEntriesForm({
transformErrors(errors, { setErrors }); transformErrors(errors, { setErrors });
setSubmitting(false); setSubmitting(false);
}; };
// Handle the request success. // Handle the request success.
const handleSuccess = (errors) => { const handleSuccess = (errors) => {
AppToaster.show({ AppToaster.show({

View File

@@ -27,6 +27,7 @@ import {
CurrencySelectList, CurrencySelectList,
FormattedMessage as T, FormattedMessage as T,
FInputGroup, FInputGroup,
FFormGroup,
} from '@/components'; } from '@/components';
import { useMakeJournalFormContext } from './MakeJournalProvider'; import { useMakeJournalFormContext } from './MakeJournalProvider';
import { JournalExchangeRateInputField } from './components'; import { JournalExchangeRateInputField } from './components';
@@ -74,7 +75,7 @@ const MakeJournalTransactionNoField = R.compose(
}; };
return ( return (
<FormGroup <FFormGroup
name={'journal_number'} name={'journal_number'}
label={<T id={'journal_no'} />} label={<T id={'journal_no'} />}
labelInfo={ labelInfo={
@@ -91,10 +92,10 @@ const MakeJournalTransactionNoField = R.compose(
<FInputGroup <FInputGroup
name={'journal_number'} name={'journal_number'}
fill={true} fill={true}
value={values.journal_number}
asyncControl={true} asyncControl={true}
onBlur={handleJournalNoBlur} onBlur={handleJournalNoBlur}
fastField={true} fastField={true}
onChange={() => {}}
/> />
<InputPrependButton <InputPrependButton
buttonProps={{ buttonProps={{
@@ -108,7 +109,7 @@ const MakeJournalTransactionNoField = R.compose(
}} }}
/> />
</ControlGroup> </ControlGroup>
</FormGroup> </FFormGroup>
); );
}, },
); );

View File

@@ -11,8 +11,14 @@ export default function MakeJournalFormDialogs() {
// Update the form once the journal number form submit confirm. // Update the form once the journal number form submit confirm.
const handleConfirm = (settings) => { const handleConfirm = (settings) => {
// Set the invoice transaction no. that cames from dialog to the form.
// the `journal_number` will be empty except the increment mode is not auto.
setFieldValue('journal_number', settings.transactionNumber); setFieldValue('journal_number', settings.transactionNumber);
setFieldValue('journal_number_manually', '');
if (settings.incrementMode !== 'auto') {
setFieldValue('journal_number_manually', settings.transactionNumber); setFieldValue('journal_number_manually', settings.transactionNumber);
}
}; };
return ( return (

View File

@@ -218,10 +218,13 @@ export const JournalSyncIncrementSettingsToForm = R.compose(
const { setFieldValue } = useFormikContext(); const { setFieldValue } = useFormikContext();
useUpdateEffect(() => { useUpdateEffect(() => {
// Do not update if the journal auto-increment mode is disabled.
if (!journalAutoIncrement) return null; if (!journalAutoIncrement) return null;
const journalNo = transactionNumber(journalNumberPrefix, journalNextNumber); setFieldValue(
setFieldValue('journal_number', journalNo); 'journal_number',
transactionNumber(journalNumberPrefix, journalNextNumber),
);
}, [ }, [
setFieldValue, setFieldValue,
journalNumberPrefix, journalNumberPrefix,

View File

@@ -6,7 +6,6 @@ import intl from 'react-intl-universal';
import { Intent } from '@blueprintjs/core'; import { Intent } from '@blueprintjs/core';
import { sumBy, setWith, toSafeInteger, get, first } from 'lodash'; import { sumBy, setWith, toSafeInteger, get, first } from 'lodash';
import { import {
transactionNumber,
updateTableCell, updateTableCell,
repeatValue, repeatValue,
transformToForm, transformToForm,
@@ -46,7 +45,7 @@ export const defaultEntry = {
export const defaultManualJournal = { export const defaultManualJournal = {
journal_number: '', journal_number: '',
journal_number_manually: false, journal_number_manually: '',
journal_type: 'Journal', journal_type: 'Journal',
date: moment(new Date()).format('YYYY-MM-DD'), date: moment(new Date()).format('YYYY-MM-DD'),
description: '', description: '',

View File

@@ -162,7 +162,11 @@ function CreditNoteForm({
<CreditNoteItemsEntriesEditorField /> <CreditNoteItemsEntriesEditorField />
<CreditNoteFormFooter /> <CreditNoteFormFooter />
<CreditNoteFloatingActions /> <CreditNoteFloatingActions />
{/*-------- Dialogs --------*/}
<CreditNoteFormDialogs /> <CreditNoteFormDialogs />
{/*-------- Effects --------*/}
<CreditNoteSyncIncrementSettingsToForm /> <CreditNoteSyncIncrementSettingsToForm />
</Form> </Form>
</Formik> </Formik>

View File

@@ -11,8 +11,14 @@ export default function CreditNoteFormDialogs() {
// Update the form once the credit number form submit confirm. // Update the form once the credit number form submit confirm.
const handleCreditNumberFormConfirm = (settings) => { const handleCreditNumberFormConfirm = (settings) => {
// Set the credit note transaction no. that cames from dialog to the form.
// the `credit_note_number` will be empty except the increment mode is not auto.
setFieldValue('credit_note_number', settings.transactionNumber); setFieldValue('credit_note_number', settings.transactionNumber);
setFieldValue('credit_note_no_manually', settings.transactionNumber); setFieldValue('credit_note_number_manually', '');
if (settings.incrementMode !== 'auto') {
setFieldValue('credit_note_number_manually', settings.transactionNumber);
}
}; };
return ( return (

View File

@@ -60,10 +60,12 @@ const CreditNoteTransactionNoField = R.compose(
const handleCreditNumberChange = () => { const handleCreditNumberChange = () => {
openDialog('credit-number-form'); openDialog('credit-number-form');
}; };
// Handle credit no. field blur. // Handle credit note no. field blur.
const handleCreditNoBlur = (event) => { const handleCreditNoBlur = (event) => {
const newValue = event.target.value; const newValue = event.target.value;
// Show the confirmation dialog if the value has changed and auto-increment
// mode is enabled.
if (values.credit_note_no !== newValue && creditAutoIncrement) { if (values.credit_note_no !== newValue && creditAutoIncrement) {
openDialog('credit-number-form', { openDialog('credit-number-form', {
initialFormValues: { initialFormValues: {
@@ -72,6 +74,8 @@ const CreditNoteTransactionNoField = R.compose(
}, },
}); });
} }
// Setting the credit note number to the form will be manually in case
// auto-increment is disable.
if (!creditAutoIncrement) { if (!creditAutoIncrement) {
setFieldValue('credit_note_number', newValue); setFieldValue('credit_note_number', newValue);
setFieldValue('credit_note_number_manually', newValue); setFieldValue('credit_note_number_manually', newValue);
@@ -92,6 +96,7 @@ const CreditNoteTransactionNoField = R.compose(
value={values.credit_note_number} value={values.credit_note_number}
asyncControl={true} asyncControl={true}
onBlur={handleCreditNoBlur} onBlur={handleCreditNoBlur}
onChange={() => {}}
/> />
<InputPrependButton <InputPrependButton
buttonProps={{ buttonProps={{
@@ -165,7 +170,6 @@ export default function CreditNoteFormHeaderFields({}) {
name={'exchange_rate'} name={'exchange_rate'}
formGroupProps={{ label: ' ', inline: true }} formGroupProps={{ label: ' ', inline: true }}
/> />
{/* ----------- Credit note date ----------- */} {/* ----------- Credit note date ----------- */}
<FastField name={'credit_note_date'}> <FastField name={'credit_note_date'}>
{({ form, field: { value }, meta: { error, touched } }) => ( {({ form, field: { value }, meta: { error, touched } }) => (

View File

@@ -45,10 +45,13 @@ export const CreditNoteSyncIncrementSettingsToForm = R.compose(
const { setFieldValue } = useFormikContext(); const { setFieldValue } = useFormikContext();
useEffect(() => { useEffect(() => {
// Do not update if the credit note auto-increment mode is disabled.
if (!creditAutoIncrement) return; if (!creditAutoIncrement) return;
const creditNo = transactionNumber(creditNumberPrefix, creditNextNumber); setFieldValue(
setFieldValue('credit_note_number', creditNo); 'credit_note_number',
transactionNumber(creditNumberPrefix, creditNextNumber),
);
}, [setFieldValue, creditNumberPrefix, creditNextNumber]); }, [setFieldValue, creditNumberPrefix, creditNextNumber]);
return null; return null;

View File

@@ -40,7 +40,8 @@ export const defaultCreditNote = {
customer_id: '', customer_id: '',
credit_note_date: moment(new Date()).format('YYYY-MM-DD'), credit_note_date: moment(new Date()).format('YYYY-MM-DD'),
credit_note_number: '', credit_note_number: '',
credit_note_no_manually: false, // Holds the credit note number that entered manually only.
credit_note_number_manually: false,
open: '', open: '',
reference_no: '', reference_no: '',
note: '', note: '',

View File

@@ -11,8 +11,14 @@ export default function ReceiptFormDialogs() {
// Update the form once the receipt number form submit confirm. // Update the form once the receipt number form submit confirm.
const handleReceiptNumberFormConfirm = (settings) => { const handleReceiptNumberFormConfirm = (settings) => {
// Set the receipt transaction no. that cames from dialog to the form.
// the `receipt_no_manually` will be empty except the increment mode is not auto.
setFieldValue('receipt_number', settings.transactionNumber); setFieldValue('receipt_number', settings.transactionNumber);
setFieldValue('receipt_number_manually', '');
if (settings.incrementMode !== 'auto') {
setFieldValue('receipt_number_manually', settings.transactionNumber); setFieldValue('receipt_number_manually', settings.transactionNumber);
}
}; };
return ( return (

View File

@@ -70,6 +70,8 @@ const ReceiptFormReceiptNumberField = R.compose(
const handleReceiptNoBlur = (event) => { const handleReceiptNoBlur = (event) => {
const newValue = event.target.value; const newValue = event.target.value;
// Show the confirmation dialog if the value has changed and auto-increment
// mode is enabled.
if (values.receipt_number !== newValue && receiptAutoIncrement) { if (values.receipt_number !== newValue && receiptAutoIncrement) {
openDialog('receipt-number-form', { openDialog('receipt-number-form', {
initialFormValues: { initialFormValues: {
@@ -78,6 +80,8 @@ const ReceiptFormReceiptNumberField = R.compose(
}, },
}); });
} }
// Setting the receipt number to the form will be manually in case
// auto-increment is disable.
if (!receiptAutoIncrement) { if (!receiptAutoIncrement) {
setFieldValue('receipt_number', newValue); setFieldValue('receipt_number', newValue);
setFieldValue('receipt_number_manually', newValue); setFieldValue('receipt_number_manually', newValue);
@@ -98,6 +102,7 @@ const ReceiptFormReceiptNumberField = R.compose(
value={values.receipt_number} value={values.receipt_number}
asyncControl={true} asyncControl={true}
onBlur={handleReceiptNoBlur} onBlur={handleReceiptNoBlur}
onChange={() => {}}
/> />
<InputPrependButton <InputPrependButton
buttonProps={{ buttonProps={{

View File

@@ -57,10 +57,13 @@ export const ReceiptSyncIncrementSettingsToForm = R.compose(
const { setFieldValue } = useFormikContext(); const { setFieldValue } = useFormikContext();
useUpdateEffect(() => { useUpdateEffect(() => {
// Do not update if the receipt auto-increment mode is disabled.
if (!receiptAutoIncrement) return; if (!receiptAutoIncrement) return;
const receiptNo = transactionNumber(receiptNumberPrefix, receiptNextNumber); setFieldValue(
setFieldValue('receipt_number', receiptNo); 'receipt_number',
transactionNumber(receiptNumberPrefix, receiptNextNumber),
);
}, [ }, [
setFieldValue, setFieldValue,
receiptNumberPrefix, receiptNumberPrefix,

View File

@@ -36,6 +36,8 @@ export const defaultReceipt = {
customer_id: '', customer_id: '',
deposit_account_id: '', deposit_account_id: '',
receipt_number: '', receipt_number: '',
// Holds the receipt number that entered manually only.
receipt_number_manually: '',
receipt_date: moment(new Date()).format('YYYY-MM-DD'), receipt_date: moment(new Date()).format('YYYY-MM-DD'),
reference_no: '', reference_no: '',
receipt_message: '', receipt_message: '',