diff --git a/lib/NGCP/Panel/Controller/API/CustomerContacts.pm b/lib/NGCP/Panel/Controller/API/CustomerContacts.pm index 79bbc43e3d..a8cb138eb9 100644 --- a/lib/NGCP/Panel/Controller/API/CustomerContacts.pm +++ b/lib/NGCP/Panel/Controller/API/CustomerContacts.pm @@ -129,6 +129,9 @@ sub POST :Allow { ); $resource->{country} = $resource->{country}{id}; $resource->{timezone} = $resource->{timezone}{name}; + + $resource->{timezone} = NGCP::Panel::Utils::DateTime::get_timezone_link($c, $resource->{timezone}); + my $reseller_id; if($c->user->roles eq "admin") { $reseller_id = $resource->{reseller_id}; diff --git a/lib/NGCP/Panel/Controller/API/SystemContacts.pm b/lib/NGCP/Panel/Controller/API/SystemContacts.pm index acbb893674..2bf3f7bfa5 100644 --- a/lib/NGCP/Panel/Controller/API/SystemContacts.pm +++ b/lib/NGCP/Panel/Controller/API/SystemContacts.pm @@ -118,6 +118,8 @@ sub POST :Allow { $resource->{country} = $resource->{country}{id}; $resource->{timezone} = $resource->{timezone}{name}; + $resource->{timezone} = NGCP::Panel::Utils::DateTime::get_timezone_link($c, $resource->{timezone}); + my $now = NGCP::Panel::Utils::DateTime::current_local; $resource->{create_timestamp} = $now; $resource->{modify_timestamp} = $now; diff --git a/lib/NGCP/Panel/Field/TimezoneSelect.pm b/lib/NGCP/Panel/Field/TimezoneSelect.pm index e456d3297f..08e40b861d 100644 --- a/lib/NGCP/Panel/Field/TimezoneSelect.pm +++ b/lib/NGCP/Panel/Field/TimezoneSelect.pm @@ -57,6 +57,7 @@ sub deflate_timezone { # deflate: default value: clean and return empty string my $c = $self->form->ctx; $value = NGCP::Panel::Utils::DateTime::strip_empty_timezone_name($c, $value); + $value = NGCP::Panel::Utils::DateTime::get_timezone_link($c, $value); return $value; } diff --git a/lib/NGCP/Panel/Role/API/CustomerContacts.pm b/lib/NGCP/Panel/Role/API/CustomerContacts.pm index bfb5869b9c..6357a3e683 100644 --- a/lib/NGCP/Panel/Role/API/CustomerContacts.pm +++ b/lib/NGCP/Panel/Role/API/CustomerContacts.pm @@ -10,6 +10,7 @@ use boolean qw(true); use Data::HAL qw(); use Data::HAL::Link qw(); use HTTP::Status qw(:constants); +use NGCP::Panel::Utils::DateTime; sub _item_rs { my ($self, $c) = @_; @@ -96,9 +97,17 @@ sub contact_by_id { return $contact_rs->find($id); } +sub process_form_resource { + my($self,$c, $item, $old_resource, $resource, $form, $process_extras) = @_; + + $resource->{timezone} = NGCP::Panel::Utils::DateTime::get_timezone_link($c, $resource->{timezone}); +} + sub update_contact { my ($self, $c, $contact, $old_resource, $resource, $form) = @_; + $self->process_form_resource($c, $contact, $old_resource, $resource, $form); + $resource->{country}{id} = delete $resource->{country}; $resource->{timezone}{name} = delete $resource->{timezone}; $form //= $self->get_form($c); diff --git a/lib/NGCP/Panel/Role/API/Subscribers.pm b/lib/NGCP/Panel/Role/API/Subscribers.pm index 22acf1f1bb..f0c4e871ac 100644 --- a/lib/NGCP/Panel/Role/API/Subscribers.pm +++ b/lib/NGCP/Panel/Role/API/Subscribers.pm @@ -377,6 +377,12 @@ sub prepare_resource { } +sub process_form_resource { + my($self,$c, $item, $old_resource, $resource, $form, $process_extras) = @_; + + $resource->{timezone} = NGCP::Panel::Utils::DateTime::get_timezone_link($c, $resource->{timezone}); +} + sub update_item { my ($self, $c, $schema, $item, $full_resource, $resource, $form) = @_; @@ -390,6 +396,8 @@ sub update_item { my $groupmembers = $full_resource->{groupmembers}; my $prov_subscriber = $subscriber->provisioning_voip_subscriber; + $self->process_form_resource($c, $item, $full_resource, $resource, $form); + if($subscriber->provisioning_voip_subscriber->is_pbx_pilot && !is_true($resource->{is_pbx_pilot})) { $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Cannot revoke is_pbx_pilot status from a subscriber."); return; diff --git a/lib/NGCP/Panel/Role/API/SystemContacts.pm b/lib/NGCP/Panel/Role/API/SystemContacts.pm index 29686c09a9..65816e9694 100644 --- a/lib/NGCP/Panel/Role/API/SystemContacts.pm +++ b/lib/NGCP/Panel/Role/API/SystemContacts.pm @@ -10,6 +10,7 @@ use boolean qw(true); use Data::HAL qw(); use Data::HAL::Link qw(); use HTTP::Status qw(:constants); +use NGCP::Panel::Utils::DateTime; sub _item_rs { my ($self, $c) = @_; @@ -82,9 +83,17 @@ sub contact_by_id { return $contact_rs->find($id); } +sub process_form_resource { + my($self,$c, $item, $old_resource, $resource, $form, $process_extras) = @_; + + $resource->{timezone} = NGCP::Panel::Utils::DateTime::get_timezone_link($c, $resource->{timezone}); +} + sub update_contact { my ($self, $c, $contact, $old_resource, $resource, $form) = @_; + $self->process_form_resource($c, $contact, $old_resource, $resource, $form); + $resource->{country}{id} = delete $resource->{country}; $resource->{timezone}{name} = delete $resource->{timezone}; $form //= $self->get_form($c); diff --git a/lib/NGCP/Panel/Utils/DateTime.pm b/lib/NGCP/Panel/Utils/DateTime.pm index 40208baab7..9f0cb0f463 100644 --- a/lib/NGCP/Panel/Utils/DateTime.pm +++ b/lib/NGCP/Panel/Utils/DateTime.pm @@ -46,6 +46,16 @@ sub strip_empty_timezone_name { return $value; } +sub get_timezone_link { + my ($c, $value) = @_; + + my %links = DateTime::TimeZone->links; + + return $value unless $value; + + return $links{$value} // $value; +} + sub get_default_timezone_name { my($c, $parent_owner_type, $parent_owner_id) = @_; $parent_owner_type //= ''; diff --git a/lib/NGCP/Panel/Utils/Subscriber.pm b/lib/NGCP/Panel/Utils/Subscriber.pm index 0510991aa3..0177696921 100644 --- a/lib/NGCP/Panel/Utils/Subscriber.pm +++ b/lib/NGCP/Panel/Utils/Subscriber.pm @@ -627,6 +627,7 @@ sub create_subscriber { } $params->{timezone} = $params->{timezone}->{name} if 'HASH' eq ref $params->{timezone}; + $params->{timezone} = NGCP::Panel::Utils::DateTime::get_timezone_link($c, $params->{timezone}); if ($params->{timezone} && !NGCP::Panel::Utils::DateTime::is_valid_timezone_name($params->{timezone})) { die("invalid timezone name '$params->{timezone}' detected"); }