1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-24 15:49:39 +02:00

Add assign merchant rule for transactions (#2174)

This commit is contained in:
Alex Hatzenbuhler 2025-05-02 06:30:31 -05:00 committed by GitHub
parent 0946a1497a
commit cf72f1a387
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 53 additions and 1 deletions

View file

@ -0,0 +1,30 @@
class Rule::ActionExecutor::SetTransactionMerchant < Rule::ActionExecutor
def type
"select"
end
def options
family.merchants.pluck(:name, :id)
end
def execute(transaction_scope, value: nil, ignore_attribute_locks: false)
merchant = family.merchants.find_by_id(value)
return unless merchant
scope = transaction_scope
unless ignore_attribute_locks
scope = scope.enrichable(:merchant_id)
end
scope.each do |txn|
Rule.transaction do
txn.log_enrichment!(
attribute_name: "merchant_id",
attribute_value: merchant.id,
source: "rule"
)
txn.update!(merchant: merchant)
end
end
end
end

View file

@ -14,7 +14,8 @@ class Rule::Registry::TransactionResource < Rule::Registry
def action_executors
enabled_executors = [
Rule::ActionExecutor::SetTransactionCategory.new(rule),
Rule::ActionExecutor::SetTransactionTags.new(rule)
Rule::ActionExecutor::SetTransactionTags.new(rule),
Rule::ActionExecutor::SetTransactionMerchant.new(rule)
]
if ai_enabled?

View file

@ -58,4 +58,25 @@ class Rule::ActionTest < ActiveSupport::TestCase
assert_equal [ tag ], transaction.reload.tags
end
end
test "set_transaction_merchant" do
merchant = @family.merchants.create!(name: "Rule test merchant")
# Does not modify transactions that are locked (user edited them)
@txn1.lock!(:merchant_id)
action = Rule::Action.new(
rule: @transaction_rule,
action_type: "set_transaction_merchant",
value: merchant.id
)
action.apply(@rule_scope)
assert_not_equal merchant.id, @txn1.reload.merchant_id
[ @txn2, @txn3 ].each do |transaction|
assert_equal merchant.id, transaction.reload.merchant_id
end
end
end