M => +2 -1
@@ 12,6 12,7 @@ field(
{ value: "financial", label: "Customer Billing Information" },
{ value: "bill_plan", label: "Bill Customer" },
{ value: "cancel_account", label: "Cancel Customer" },
{ value: "undo", label: "Undo" }
{ value: "undo", label: "Undo" },
{ value: "reset_declines", label: "Reset Declines" }
]
)
A lib/admin_actions/reset_declines.rb => lib/admin_actions/reset_declines.rb +44 -0
@@ 0,0 1,44 @@
+# frozen_string_literal: true
+
+require "value_semantics/monkey_patched"
+require_relative "../admin_action"
+
+class AdminAction
+ class ResetDeclines < AdminAction
+ class Command
+ def self.for(target_customer, **)
+ target_customer.declines.then { |declines|
+ AdminAction::ResetDeclines.for(
+ customer_id: target_customer.customer_id,
+ previous_value: declines
+ )
+ }
+ end
+ end
+
+ def customer_id
+ @attributes[:customer_id]
+ end
+
+ def previous_value
+ @attributes[:previous_value].to_i
+ end
+
+ def forward
+ CustomerFinancials.new(customer_id).set_declines(0).then { self }
+ end
+
+ # I could make sure here that they're still set to 0 in the reverse case, so
+ # I know there haven't been any declines since I ran the command, but I
+ # think I don't care actually, and I should just set it back to what it was
+ # and trust the human knows what they're doing
+ def reverse
+ CustomerFinancials.new(customer_id).set_declines(previous_value)
+ .then { self }
+ end
+
+ def to_s
+ "reset_declines(#{customer_id}): #{previous_value} -> 0"
+ end
+ end
+end
M lib/admin_command.rb => lib/admin_command.rb +3 -1
@@ 3,6 3,7 @@
require_relative "admin_action_repo"
require_relative "admin_actions/cancel"
require_relative "admin_actions/financial"
+require_relative "admin_actions/reset_declines"
require_relative "bill_plan_command"
require_relative "customer_info_form"
require_relative "financial_info"
@@ 174,7 175,8 @@ class AdminCommand
[
[:cancel_account, Simple.new(AdminAction::CancelCustomer)],
[:financial, Simple.new(AdminAction::Financial)],
- [:undo, Undoable.new(Undo)]
+ [:undo, Undoable.new(Undo)],
+ [:reset_declines, Undoable.new(AdminAction::ResetDeclines::Command)]
].each do |action, handler|
define_method("action_#{action}") do
handler.call(
M lib/customer_finacials.rb => lib/customer_finacials.rb +8 -0
@@ 42,6 42,14 @@ class CustomerFinancials
end
end
+ def set_declines(num)
+ if num.positive?
+ REDIS.set("jmp_pay_decline-#{@customer_id}", num)
+ else
+ REDIS.del("jmp_pay_decline-#{@customer_id}")
+ end
+ end
+
class TransactionInfo
value_semantics do
transaction_id String