|
|
|
@ -368,120 +368,6 @@ sub peering_create :Chained('peering_list') :PathPart('create') :Args(0) {
|
|
|
|
|
$c->stash(form => $form);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub customer_list :Chained('contract_list') :PathPart('customer') :CaptureArgs(0) {
|
|
|
|
|
my ($self, $c) = @_;
|
|
|
|
|
|
|
|
|
|
my $base_rs = $c->stash->{contract_select_rs};
|
|
|
|
|
$c->stash->{customer_rs} = $base_rs->search({
|
|
|
|
|
'-or' => [
|
|
|
|
|
'product.class' => 'sipaccount',
|
|
|
|
|
'product.class' => 'pbxaccount',
|
|
|
|
|
],
|
|
|
|
|
}, {
|
|
|
|
|
'join' => {'billing_mappings' => 'product'},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$c->stash(page_title => "Customer",
|
|
|
|
|
page_title_plural => "Customers");
|
|
|
|
|
$c->stash(ajax_uri => $c->uri_for_action("/customer/ajax"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub customer_base :Chained('customer_list') :PathPart('') :CaptureArgs(1) {
|
|
|
|
|
my ($self, $c, $contract_id) = @_;
|
|
|
|
|
|
|
|
|
|
unless($contract_id->is_int) {
|
|
|
|
|
NGCP::Panel::Utils::Message->error(
|
|
|
|
|
c => $c,
|
|
|
|
|
error => "customer contract id '$contract_id' is not valid",
|
|
|
|
|
desc => "Invalid customer contract id",
|
|
|
|
|
);
|
|
|
|
|
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/customer'));
|
|
|
|
|
}
|
|
|
|
|
my $contract_rs = $c->stash->{customer_rs};
|
|
|
|
|
$c->stash->{contract} = $contract_rs->find($contract_id);
|
|
|
|
|
unless($c->stash->{contract}) {
|
|
|
|
|
NGCP::Panel::Utils::Message->error(
|
|
|
|
|
c => $c,
|
|
|
|
|
error => "customer contract id '$contract_id' not found",
|
|
|
|
|
desc => "Customer contract id not found",
|
|
|
|
|
);
|
|
|
|
|
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/customer'));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sub customer_edit :Chained('customer_base') :PathPart('edit') :Args(0) {
|
|
|
|
|
my ($self, $c) = @_;
|
|
|
|
|
|
|
|
|
|
my $contract = $c->stash->{contract};
|
|
|
|
|
my $posted = ($c->request->method eq 'POST');
|
|
|
|
|
my $form;
|
|
|
|
|
my $params = { $contract->get_inflated_columns };
|
|
|
|
|
$params->{contact}{id} = delete $params->{contact_id};
|
|
|
|
|
$params->{product}{id} = $contract->billing_mappings->first->product_id;
|
|
|
|
|
$params->{billing_profile}{id} = $contract->billing_mappings->first->billing_profile_id;
|
|
|
|
|
$params = $params->merge($c->session->{created_objects});
|
|
|
|
|
if($c->config->{features}->{cloudpbx}) {
|
|
|
|
|
$form = NGCP::Panel::Form::Contract::ProductSelect->new;
|
|
|
|
|
} else {
|
|
|
|
|
$form = NGCP::Panel::Form::Contract::Basic->new;
|
|
|
|
|
}
|
|
|
|
|
$form->process(
|
|
|
|
|
posted => $posted,
|
|
|
|
|
params => $c->request->params,
|
|
|
|
|
item => $params
|
|
|
|
|
);
|
|
|
|
|
NGCP::Panel::Utils::Navigation::check_form_buttons(
|
|
|
|
|
c => $c,
|
|
|
|
|
form => $form,
|
|
|
|
|
fields => {'contact.create' => $c->uri_for('/contact/create'),
|
|
|
|
|
'billing_profile.create' => $c->uri_for('/billing/create')},
|
|
|
|
|
back_uri => $c->req->uri,
|
|
|
|
|
);
|
|
|
|
|
if($posted && $form->validated) {
|
|
|
|
|
try {
|
|
|
|
|
my $schema = $c->model('DB');
|
|
|
|
|
$schema->txn_do(sub {
|
|
|
|
|
$form->params->{contact_id} = $form->params->{contact}{id};
|
|
|
|
|
delete $form->params->{contact};
|
|
|
|
|
my $bprof_id = $form->params->{billing_profile}{id};
|
|
|
|
|
delete $form->params->{billing_profile};
|
|
|
|
|
$form->{modify_timestamp} = NGCP::Panel::Utils::DateTime::current_local;
|
|
|
|
|
my $product_id = $form->params->{product}{id};
|
|
|
|
|
delete $form->params->{product};
|
|
|
|
|
unless($form->params->{max_subscribers} && length($form->params->{max_subscribers})) {
|
|
|
|
|
$form->params->{max_subscribers} = undef;
|
|
|
|
|
}
|
|
|
|
|
my $old_bprof_id = $contract->billing_mappings->first->billing_profile_id;
|
|
|
|
|
say ">>>>>>>>>>> old bprof_id=$old_bprof_id";
|
|
|
|
|
$contract->update($form->params);
|
|
|
|
|
if($bprof_id != $old_bprof_id) {
|
|
|
|
|
$contract->billing_mappings->create({
|
|
|
|
|
billing_profile_id => $bprof_id,
|
|
|
|
|
product_id => $product_id,
|
|
|
|
|
start_date => NGCP::Panel::Utils::DateTime::current_local,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delete $c->session->{created_objects}->{contact};
|
|
|
|
|
delete $c->session->{created_objects}->{billing_profile};
|
|
|
|
|
my $contract_id = $contract->id;
|
|
|
|
|
$c->flash(messages => [{type => 'success', text => "Customer #$contract_id successfully updated"}]);
|
|
|
|
|
});
|
|
|
|
|
} catch($e) {
|
|
|
|
|
NGCP::Panel::Utils::Message->error(
|
|
|
|
|
c => $c,
|
|
|
|
|
error => $e,
|
|
|
|
|
desc => "Failed to update customer contract.",
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/customer'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$c->stash(edit_flag => 1);
|
|
|
|
|
$c->stash(form => $form);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub reseller_list :Chained('contract_list') :PathPart('reseller') :CaptureArgs(0) {
|
|
|
|
|
my ($self, $c) = @_;
|
|
|
|
|
|
|
|
|
|