diff --git a/forms/admin_number_change.rb b/forms/admin_number_change.rb index 0f695e92e1b867c2d823d24370668108ac013be0..3989c682bbe6321fbb32036fd6ea2d076b384a74 100644 --- a/forms/admin_number_change.rb +++ b/forms/admin_number_change.rb @@ -8,3 +8,10 @@ field( label: "Number to change to?", value: "" ) + +field( + var: "should_delete", + type: "boolean", + label: "Should we delete the old number?", + value: 0 +) diff --git a/lib/admin_action.rb b/lib/admin_action.rb index af6f9035e46f8e109fa80851f6a917058fb7204a..009512dce34bde83748c84761244f23dcc2ef8f8 100644 --- a/lib/admin_action.rb +++ b/lib/admin_action.rb @@ -99,6 +99,13 @@ class AdminAction @attributes[:parent_id] end + # This tells us if this is the first time we're running this command. + # This can be used by actions which take destructive or annoying actions + # and don't want to redo those parts on an undo or redo. + def first_time? + !parent_id + end + def actor_id @attributes[:actor_id] end diff --git a/lib/admin_actions/number_change.rb b/lib/admin_actions/number_change.rb index b5b1cc2395e5086b59a8e139395e4dbc01f4cad1..cfa851837dad8b94d0e909d7e1bf9a1156e1fe18 100644 --- a/lib/admin_actions/number_change.rb +++ b/lib/admin_actions/number_change.rb @@ -56,6 +56,10 @@ class AdminAction @attributes[:new_tel] end + def should_delete? + ["1", "true"].include?(@attributes[:should_delete]) + end + def check_forward EMPromise.all([ check_noop, @@ -67,7 +71,8 @@ class AdminAction sgx = TrivialBackendSgxRepo.new.get(customer_id) EMPromise.all([ REDIS.rename("catapult_fwd-#{old_tel}", "catapult_fwd-#{new_tel}"), - sgx.register!(new_tel) + sgx.register!(new_tel), + should_delete? && first_time? ? disconnect_number : nil ]).then { self } end @@ -79,11 +84,27 @@ class AdminAction end def to_s - "number_change(#{customer_id}): #{old_tel} -> #{new_tel}" + "number_change(#{customer_id}): #{old_tel} -> #{new_tel}#{delete_warning}" end protected + def disconnect_number + # Order name is limited to 40 characters + # Assuming 12 chars for new_tel and 12 for customer_id, this is tight + # but ok + BandwidthTnRepo.new.disconnect( + old_tel, + "cust #{customer_id} swap to #{new_tel}" + ) + end + + def delete_warning + return "" unless should_delete? && !first_time? + + " * NOT DELETING" + end + def check_noop EMPromise.reject(NoOp.new) if new_tel == old_tel end