MT#6789 API: handle subscriber email and profile.

Handle new email field.
Fix profile handling on subscriber creation.
ipeshinskaya/InvoiceTemplate5
Andreas Granig 11 years ago
parent e9d30a3b89
commit 88c6e4d78f

@ -99,7 +99,7 @@ sub GET :Allow {
my (@embedded, @links);
my $form = $self->get_form($c);
for my $subscriber ($subscribers->search({}, {order_by => {-asc => 'me.id'}})->all) {
my $resource = $self->transform_resource($c, $subscriber, $form);
my $resource = $self->resource_from_item($c, $subscriber, $form);
push @embedded, $self->hal_from_item($c, $subscriber, $resource, $form);
push @links, Data::HAL::Link->new(
relation => 'ngcp:'.$self->resource_name,

@ -51,7 +51,7 @@ sub GET :Allow {
last unless $self->resource_exists($c, subscriber => $subscriber);
my $form = $self->get_form($c);
my $resource = $self->transform_resource($c, $subscriber, $form);
my $resource = $self->resource_from_item($c, $subscriber, $form);
my $hal = $self->hal_from_item($c, $subscriber, $resource, $form);
my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new(
@ -119,7 +119,7 @@ sub PUT :Allow {
$c->response->header(Preference_Applied => 'return=minimal');
$c->response->body(q());
} else {
$resource = $self->transform_resource($c, $subscriber, $form);
$resource = $self->resource_from_item($c, $subscriber, $form);
my $hal = $self->hal_from_item($c, $subscriber, $resource, $form);
my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new(
$hal->http_headers,
@ -151,7 +151,7 @@ sub PATCH :Allow {
last unless $json;
my $form = $self->get_form($c);
my $old_resource = $self->transform_resource($c, $subscriber, $form);
my $old_resource = $self->resource_from_item($c, $subscriber, $form);
my $resource = $self->apply_patch($c, $old_resource, $json);
last unless $resource;
@ -170,7 +170,7 @@ sub PATCH :Allow {
$c->response->header(Preference_Applied => 'return=minimal');
$c->response->body(q());
} else {
$resource = $self->transform_resource($c, $subscriber, $form);
$resource = $self->resource_from_item($c, $subscriber, $form);
my $hal = $self->hal_from_item($c, $subscriber, $resource, $form);
my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new(
$hal->http_headers,

@ -79,7 +79,7 @@ has_field 'save' => (
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/contract domain e164 alias_number webusername webpassword username password status lock external_id administrative is_pbx_group pbx_group display_name profile_set profile/ ],
render_list => [qw/contract domain e164 alias_number email webusername webpassword username password status lock external_id administrative is_pbx_group pbx_group display_name profile_set profile/ ],
);
has_block 'actions' => (

@ -24,7 +24,7 @@ sub get_form {
return NGCP::Panel::Form::Subscriber::SubscriberAPI->new(ctx => $c);
}
sub transform_resource {
sub resource_from_item {
my ($self, $c, $item, $form) = @_;
my $bill_resource = { $item->get_inflated_columns };
@ -37,6 +37,12 @@ sub transform_resource {
delete $resource{is_pbx_group};
delete $resource{pbx_group_id};
}
delete $resource{contact_id};
if($item->contact) {
$resource{email} = $item->contact->email;
} else {
$resource{email} = undef;
}
$form //= $self->get_form($c);
last unless $self->validate_form(
@ -206,6 +212,8 @@ sub prepare_resource {
$resource->{contract_id} = delete $resource->{customer_id};
$resource->{status} //= 'active';
$resource->{administrative} //= 0;
$resource->{profile_set}{id} = delete $resource->{profile_set_id};
$resource->{profile}{id} = delete $resource->{profile_id};
my $form = $self->get_form($c);
return unless $self->validate_form(
@ -439,6 +447,25 @@ sub update_item {
}
}
if($resource->{email}) {
my $contact = $subscriber->contact;
if($contact && $contact->email ne $resource->{email}) {
$contact->update({
email => $resource->{email}
});
} elsif(!$contact) {
$contact = $c->model('DB')->resultset('contacts')->create({
reseller_id => $subscriber->contract->contact->reseller_id,
email => $resource->{email},
});
} # else old email == new email, nothing to do
$resource->{contact_id} = $contact->id;
} elsif($subscriber->contact) {
$subscriber->contact->delete;
$resource->{contact_id} = undef; # mark for clearance
}
delete $resource->{email};
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
schema => $c->model('DB'),
primary_number => $resource->{e164},
@ -450,6 +477,7 @@ sub update_item {
my $billing_res = {
external_id => $resource->{external_id},
status => $resource->{status},
contact_id => $resource->{contact_id},
};
my $provisioning_res = {
password => $resource->{password},

Loading…
Cancel
Save