~singpolyma/sgx-jmp

36182e5f1a70061eb52a895076a469cc5e0b22f9 — Christopher Vollick 5 months ago 67609fe
ResetDeclines Command

This is a nice simple first one.
I set the declines to 0, and on Undo I set it back to what it was
before.

There's no extra form or information, it just does the thing.
M forms/admin_menu.rb => forms/admin_menu.rb +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