diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 157bedb425..82b99c277c 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -2186,15 +2186,32 @@ sub preferences_callforward_delete :Chained('base') :PathPart('preferences/callf if(($c->user->roles eq "admin" || $c->user->roles eq "reseller") && $c->user->read_only); try { - my $prov_subscriber = $c->stash->{subscriber}->provisioning_voip_subscriber; - $prov_subscriber->voip_cf_mappings->search({ type => $cf_type }) - ->delete_all; - my $cf_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( - c => $c, - attribute => $cf_type, - prov_subscriber => $prov_subscriber, - ); - $cf_pref->delete_all; + my $schema = $c->model('DB'); + $schema->txn_do(sub { + my $prov_subscriber = $c->stash->{subscriber}->provisioning_voip_subscriber; + my $mapping_rs = $prov_subscriber->voip_cf_mappings->search({ type => $cf_type }); + my $autoattendant_count = 0; + foreach my $map($mapping_rs->all) { + $autoattendant_count += NGCP::Panel::Utils::Subscriber::check_dset_autoattendant_status($map->destination_set); + } + $mapping_rs->delete; + my $cf_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( + c => $c, + attribute => $cf_type, + prov_subscriber => $prov_subscriber, + ); + $cf_pref->delete_all; + if ($autoattendant_count > 0) { + while ($autoattendant_count != 0) { + $autoattendant_count--; + NGCP::Panel::Utils::Events::insert( + schema => $schema, + subscriber => $c->stash->{subscriber}, + type => 'end_ivr', + ); + } + } + }); NGCP::Panel::Utils::Message::info( c => $c, desc => $c->loc('Successfully deleted Call Forward'),