diff --git a/packages/server/src/services/Banking/RegonizeTranasctions/_utils.ts b/packages/server/src/services/Banking/RegonizeTranasctions/_utils.ts index a69aebe5f..4ca0d8b9f 100644 --- a/packages/server/src/services/Banking/RegonizeTranasctions/_utils.ts +++ b/packages/server/src/services/Banking/RegonizeTranasctions/_utils.ts @@ -116,6 +116,6 @@ const determineFieldType = (field: string): string => { case 'description': case 'payee': default: - return 'unknown'; + return 'text'; } }; diff --git a/packages/server/src/services/Banking/RegonizeTranasctions/events/TriggerRecognizedTransactions.ts b/packages/server/src/services/Banking/RegonizeTranasctions/events/TriggerRecognizedTransactions.ts index 0ee073a46..466f0b3b1 100644 --- a/packages/server/src/services/Banking/RegonizeTranasctions/events/TriggerRecognizedTransactions.ts +++ b/packages/server/src/services/Banking/RegonizeTranasctions/events/TriggerRecognizedTransactions.ts @@ -1,4 +1,5 @@ import { Inject, Service } from 'typedi'; +import { isEqual, omit } from 'lodash'; import events from '@/subscribers/events'; import { IBankRuleEventCreatedPayload, @@ -55,10 +56,22 @@ export class TriggerRecognizedTransactions { private async recognizedTransactionsOnRuleEdited({ tenantId, editRuleDTO, + oldBankRule, + bankRule, ruleId, }: IBankRuleEventEditedPayload) { const payload = { tenantId, ruleId }; + // Cannot continue if the new and old bank rule values are the same, + // after excluding `createdAt` and `updatedAt` dates. + if ( + isEqual( + omit(bankRule, ['createdAt', 'updatedAt']), + omit(oldBankRule, ['createdAt', 'updatedAt']) + ) + ) { + return; + } await this.agenda.now( 'rerecognize-uncategorized-transactions-job', payload diff --git a/packages/server/src/services/Banking/Rules/EditBankRule.ts b/packages/server/src/services/Banking/Rules/EditBankRule.ts index 2d6d868f4..67536ab82 100644 --- a/packages/server/src/services/Banking/Rules/EditBankRule.ts +++ b/packages/server/src/services/Banking/Rules/EditBankRule.ts @@ -47,6 +47,7 @@ export class EditBankRuleService { const oldBankRule = await BankRule.query() .findById(ruleId) + .withGraphFetched('conditions') .throwIfNotFound(); const tranformDTO = this.transformDTO(editRuleDTO); @@ -64,15 +65,15 @@ export class EditBankRuleService { } as IBankRuleEventEditingPayload); // Updates the given bank rule. - await BankRule.query(trx).upsertGraphAndFetch({ + const bankRule = await BankRule.query(trx).upsertGraphAndFetch({ ...tranformDTO, id: ruleId, }); - // Triggers `onBankRuleEdited` event. await this.eventPublisher.emitAsync(events.bankRules.onEdited, { tenantId, oldBankRule, + bankRule, ruleId, editRuleDTO, trx, diff --git a/packages/server/src/services/Banking/Rules/types.ts b/packages/server/src/services/Banking/Rules/types.ts index 7f8bb6cbc..f13670db8 100644 --- a/packages/server/src/services/Banking/Rules/types.ts +++ b/packages/server/src/services/Banking/Rules/types.ts @@ -110,6 +110,8 @@ export interface IBankRuleEventEditingPayload { export interface IBankRuleEventEditedPayload { tenantId: number; ruleId: number; + oldBankRule: IBankRule; + bankRule: IBankRule; editRuleDTO: IEditBankRuleDTO; trx?: Knex.Transaction; } diff --git a/packages/webapp/src/containers/Banking/Rules/RuleFormDialog/RuleFormContentForm.tsx b/packages/webapp/src/containers/Banking/Rules/RuleFormDialog/RuleFormContentForm.tsx index b27b86f50..ee9820772 100644 --- a/packages/webapp/src/containers/Banking/Rules/RuleFormDialog/RuleFormContentForm.tsx +++ b/packages/webapp/src/containers/Banking/Rules/RuleFormDialog/RuleFormContentForm.tsx @@ -177,12 +177,12 @@ function RuleFormConditions() { setFieldValue('conditions', _conditions); }; - const handleConditionFieldChange = (item) => { + const handleConditionFieldChange = R.curry((index, item) => { const defaultComparator = getDefaultFieldConditionByFieldKey(item.value); - + setFieldValue(`conditions[${index}].field`, item.value); setFieldValue(`conditions[${index}].comparator`, defaultComparator); - }; + }); return ( @@ -199,7 +199,7 @@ function RuleFormConditions() { name={`conditions[${index}].field`} items={Fields} popoverProps={{ minimal: true, inline: false }} - onItemChange={handleConditionFieldChange} + onItemChange={handleConditionFieldChange(index)} fastField /> diff --git a/packages/webapp/src/containers/Banking/Rules/RuleFormDialog/_utils.ts b/packages/webapp/src/containers/Banking/Rules/RuleFormDialog/_utils.ts index 343d9d5a3..b3ca5b924 100644 --- a/packages/webapp/src/containers/Banking/Rules/RuleFormDialog/_utils.ts +++ b/packages/webapp/src/containers/Banking/Rules/RuleFormDialog/_utils.ts @@ -84,6 +84,6 @@ export const getDefaultFieldConditionByFieldKey = (fieldKey?: string) => { case 'amount': return 'bigger_or_equal'; default: - return 'equals'; + return 'contains'; } };