mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-27 17:19:39 +02:00
Add assign merchant rule for transactions (#2174)
This commit is contained in:
parent
0946a1497a
commit
cf72f1a387
3 changed files with 53 additions and 1 deletions
30
app/models/rule/action_executor/set_transaction_merchant.rb
Normal file
30
app/models/rule/action_executor/set_transaction_merchant.rb
Normal 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
|
|
@ -14,7 +14,8 @@ class Rule::Registry::TransactionResource < Rule::Registry
|
||||||
def action_executors
|
def action_executors
|
||||||
enabled_executors = [
|
enabled_executors = [
|
||||||
Rule::ActionExecutor::SetTransactionCategory.new(rule),
|
Rule::ActionExecutor::SetTransactionCategory.new(rule),
|
||||||
Rule::ActionExecutor::SetTransactionTags.new(rule)
|
Rule::ActionExecutor::SetTransactionTags.new(rule),
|
||||||
|
Rule::ActionExecutor::SetTransactionMerchant.new(rule)
|
||||||
]
|
]
|
||||||
|
|
||||||
if ai_enabled?
|
if ai_enabled?
|
||||||
|
|
|
@ -58,4 +58,25 @@ class Rule::ActionTest < ActiveSupport::TestCase
|
||||||
assert_equal [ tag ], transaction.reload.tags
|
assert_equal [ tag ], transaction.reload.tags
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue