MT#3961 more translations

gjungwirth/test_sleeps
Gerhard Jungwirth 12 years ago
parent 1f37a80b84
commit 9040831ecd

@ -26,7 +26,7 @@ sub list_admin :PathPart('administrator') :Chained('/') :CaptureArgs(0) {
template => 'administrator/list.tt', template => 'administrator/list.tt',
); );
my $cols = [ my $cols = [
{ name => "id", search => 1, title => "#" }, { name => "id", search => 1, title => $c->loc("#") },
]; ];
if($c->user->is_superuser) { if($c->user->is_superuser) {
@{ $cols } = (@{ $cols }, { name => "reseller.name", search => 1, title => $c->loc("Reseller") }); @{ $cols } = (@{ $cols }, { name => "reseller.name", search => 1, title => $c->loc("Reseller") });

@ -1,7 +1,6 @@
package NGCP::Panel::Controller::Billing; package NGCP::Panel::Controller::Billing;
use Sipwise::Base; use Sipwise::Base;
use Text::CSV_XS; use Text::CSV_XS;
use I18N::Langinfo qw(langinfo DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7);
use DateTime::Format::ISO8601; use DateTime::Format::ISO8601;
BEGIN { extends 'Catalyst::Controller'; } BEGIN { extends 'Catalyst::Controller'; }
@ -20,9 +19,6 @@ use NGCP::Panel::Utils::Datatables;
use NGCP::Panel::Utils::Preferences; use NGCP::Panel::Utils::Preferences;
use NGCP::Panel::Utils::DateTime; use NGCP::Panel::Utils::DateTime;
my @WEEKDAYS = map { langinfo($_) } (DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7, DAY_1);
#Monday Tuesday Wednesday Thursday Friday Saturday Sunday
sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ($self, $c) = @_; my ($self, $c) = @_;
$c->log->debug(__PACKAGE__ . '::auto'); $c->log->debug(__PACKAGE__ . '::auto');
@ -37,9 +33,9 @@ sub profile_list :Chained('/') :PathPart('billing') :CaptureArgs(0) {
my $profiles_rs = $self->$dispatch_to($c); my $profiles_rs = $self->$dispatch_to($c);
$c->stash(profiles_rs => $profiles_rs); $c->stash(profiles_rs => $profiles_rs);
$c->stash->{profile_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ $c->stash->{profile_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "id", "search" => 1, "title" => "#" }, { name => "id", "search" => 1, "title" => $c->loc("#") },
{ name => "name", "search" => 1, "title" => "Name" }, { name => "name", "search" => 1, "title" => $c->loc("Name") },
{ name => "reseller.name", "search" => 1, "title" => "Reseller" }, { name => "reseller.name", "search" => 1, "title" => $c->loc("Reseller") },
]); ]);
$c->stash(template => 'billing/list.tt'); $c->stash(template => 'billing/list.tt');
@ -75,20 +71,20 @@ sub base :Chained('profile_list') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $profile_id) = @_; my ($self, $c, $profile_id) = @_;
unless($profile_id && $profile_id->is_integer) { unless($profile_id && $profile_id->is_integer) {
$c->flash(messages => [{type => 'error', text => 'Invalid profile id detected!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Invalid profile id detected!')}]);
$c->response->redirect($c->uri_for()); $c->response->redirect($c->uri_for());
return; return;
} }
$c->stash->{zone_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ $c->stash->{zone_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => 'id', search => 1, title => '#' }, { name => 'id', search => 1, title => $c->loc('#') },
{ name => 'zone', search => 1, title => 'Zone' }, { name => 'zone', search => 1, title => $c->loc('Zone') },
{ name => 'detail', search => 1, title => 'Zone Details' }, { name => 'detail', search => 1, title => $c->loc('Zone Details') },
]); ]);
my $res = $c->stash->{profiles_rs}->find($profile_id); my $res = $c->stash->{profiles_rs}->find($profile_id);
unless(defined($res)) { unless(defined($res)) {
$c->flash(messages => [{type => 'error', text => 'Billing Profile does not exist!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Billing Profile does not exist!')}]);
$c->response->redirect($c->uri_for()); $c->response->redirect($c->uri_for());
return; return;
} }
@ -182,12 +178,12 @@ sub edit :Chained('base') :PathPart('edit') {
}); });
delete $c->session->{created_objects}->{reseller}; delete $c->session->{created_objects}->{reseller};
$c->flash(messages => [{type => 'success', text => 'Billing profile successfully updated'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Billing profile successfully updated')}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to update billing profile.", desc => $c->loc("Failed to update billing profile."),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/billing')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/billing'));
@ -239,12 +235,12 @@ sub create :Chained('profile_list') :PathPart('create') :Args(0) {
$c->session->{created_objects}->{billing_profile} = { id => $profile->id }; $c->session->{created_objects}->{billing_profile} = { id => $profile->id };
delete $c->session->{created_objects}->{reseller}; delete $c->session->{created_objects}->{reseller};
$c->flash(messages => [{type => 'success', text => 'Billing profile successfully created'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Billing profile successfully created')}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to create billing profile.", desc => $c->loc("Failed to create billing profile."),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/billing')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/billing'));
@ -264,11 +260,11 @@ sub create_without_reseller :Chained('profile_list') :PathPart('create/noreselle
sub fees_list :Chained('base') :PathPart('fees') :CaptureArgs(0) { sub fees_list :Chained('base') :PathPart('fees') :CaptureArgs(0) {
my ($self, $c) = @_; my ($self, $c) = @_;
$c->stash->{fee_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ $c->stash->{fee_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => 'id', search => 1, title => '#' }, { name => 'id', search => 1, title => $c->loc('#') },
{ name => 'source', search => 1, title => 'Source Pattern' }, { name => 'source', search => 1, title => $c->loc('Source Pattern') },
{ name => 'destination', search => 1, title => 'Destination Pattern' }, { name => 'destination', search => 1, title => $c->loc('Destination Pattern') },
{ name => 'direction', search => 1, title => 'Match Direction' }, { name => 'direction', search => 1, title => $c->loc('Match Direction') },
{ name => 'billing_zone.detail', search => 1, title => 'Billing Zone' }, { name => 'billing_zone.detail', search => 1, title => $c->loc('Billing Zone') },
]); ]);
$c->stash(template => 'billing/fees.tt'); $c->stash(template => 'billing/fees.tt');
} }
@ -282,7 +278,7 @@ sub fees_base :Chained('fees_list') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $fee_id) = @_; my ($self, $c, $fee_id) = @_;
unless($fee_id && $fee_id->is_integer) { unless($fee_id && $fee_id->is_integer) {
$c->flash(messages => [{type => 'error', text => 'Invalid billing fee id detected!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Invalid billing fee id detected!')}]);
$c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees'));
return; return;
} }
@ -291,7 +287,7 @@ sub fees_base :Chained('fees_list') :PathPart('') :CaptureArgs(1) {
->search(undef, {join => 'billing_zone',}) ->search(undef, {join => 'billing_zone',})
->find($fee_id); ->find($fee_id);
unless(defined($res)) { unless(defined($res)) {
$c->flash(messages => [{type => 'error', text => 'Billing Fee does not exist!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Billing Fee does not exist!')}]);
$c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees'));
return; return;
} }
@ -333,7 +329,7 @@ sub fees_create :Chained('fees_list') :PathPart('create') :Args(0) {
->billing_fees->create($form->values); ->billing_fees->create($form->values);
delete $c->session->{created_objects}->{billing_zone}; delete $c->session->{created_objects}->{billing_zone};
$c->flash(messages => [{type => 'success', text => 'Billing Fee successfully created!'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Billing Fee successfully created!')}]);
$c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees'));
return; return;
} }
@ -360,7 +356,7 @@ sub fees_upload :Chained('fees_list') :PathPart('upload') :Args(0) {
# TODO: check by formhandler? # TODO: check by formhandler?
unless($upload) { unless($upload) {
$c->flash(messages => [{type => 'error', text => 'No Billing Fee file specified!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('No Billing Fee file specified!')}]);
$c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees'));
return; return;
} }
@ -395,15 +391,15 @@ sub fees_upload :Chained('fees_list') :PathPart('upload') :Args(0) {
->billing_fees->create($row); ->billing_fees->create($row);
} }
}); });
my $text = "Billing Fee successfully uploaded"; my $text = $c->loc('Billing Fee successfully uploaded');
if(@fails) { if(@fails) {
$text .= ", but skipped the following line numbers: " . (join ", ", @fails); $text .= $c->loc(", but skipped the following line numbers: ") . (join ", ", @fails);
} }
$c->flash(messages => [{type => 'success', text => $text}]); $c->flash(messages => [{type => 'success', text => $text}]);
} catch($e) { } catch($e) {
$c->log->error("failed to upload csv: $e"); $c->log->error("failed to upload csv: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to upload Billing Fees'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Failed to upload Billing Fees')}]);
}; };
$c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees'));
@ -441,7 +437,7 @@ sub fees_edit :Chained('fees_base') :PathPart('edit') :Args(0) {
$c->stash->{'fee_result'} $c->stash->{'fee_result'}
->update($form->values); ->update($form->values);
delete $c->session->{created_objects}->{billing_zone}; delete $c->session->{created_objects}->{billing_zone};
$c->flash(messages => [{type => 'success', text => 'Billing Profile successfully changed!'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Billing Profile successfully changed!')}]);
$c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees'));
return; return;
} }
@ -454,12 +450,12 @@ sub fees_delete :Chained('fees_base') :PathPart('delete') :Args(0) {
my ($self, $c) = @_; my ($self, $c) = @_;
unless ( defined($c->stash->{'fee_result'}) ) { unless ( defined($c->stash->{'fee_result'}) ) {
$c->flash(messages => [{type => 'error', text => 'Billing fee not found!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Billing fee not found!')}]);
return; return;
} }
$c->stash->{'fee_result'}->delete; $c->stash->{'fee_result'}->delete;
$c->flash(messages => [{type => 'success', text => 'Billing profile successfully deleted!'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Billing profile successfully deleted!')}]);
$c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees'));
} }
@ -500,12 +496,12 @@ sub zones_create :Chained('zones_list') :PathPart('create') :Args(0) {
try { try {
my $zone = $c->stash->{'profile_result'}->billing_zones->create($form->values); my $zone = $c->stash->{'profile_result'}->billing_zones->create($form->values);
$c->session->{created_objects}->{billing_zone} = { id => $zone->id }; $c->session->{created_objects}->{billing_zone} = { id => $zone->id };
$c->flash(messages => [{type => 'success', text => 'Billing Zone successfully created'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Billing Zone successfully created')}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to create billing zone.", desc => $c->loc('Failed to create billing zone.'),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{zones_root_uri}); NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{zones_root_uri});
@ -522,14 +518,14 @@ sub zones_base :Chained('zones_list') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $zone_id) = @_; my ($self, $c, $zone_id) = @_;
unless($zone_id && $zone_id->is_integer) { unless($zone_id && $zone_id->is_integer) {
$c->flash(messages => [{type => 'error', text => 'Invalid billing zone id detected'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Invalid billing zone id detected')}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{zones_root_uri}); NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{zones_root_uri});
} }
my $res = $c->stash->{'profile_result'}->billing_zones my $res = $c->stash->{'profile_result'}->billing_zones
->find($zone_id); ->find($zone_id);
unless(defined($res)) { unless(defined($res)) {
$c->flash(messages => [{type => 'error', text => 'Billing zone does not exist!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Billing zone does not exist!')}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{zones_root_uri}); NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{zones_root_uri});
} }
$c->stash(zone_result => $res); $c->stash(zone_result => $res);
@ -540,12 +536,12 @@ sub zones_delete :Chained('zones_base') :PathPart('delete') :Args(0) {
try { try {
$c->stash->{zone_result}->delete; $c->stash->{zone_result}->delete;
$c->flash(messages => [{type => 'success', text => 'Billing zone successfully deleted'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Billing zone successfully deleted')}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to delete billing zone.", desc => $c->loc('Failed to delete billing zone.'),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{zones_root_uri}); NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{zones_root_uri});
@ -561,9 +557,9 @@ sub peaktimes_list :Chained('base') :PathPart('peaktimes') :CaptureArgs(0) {
$rs = $rs->search(undef, {order_by => 'start'}); $rs = $rs->search(undef, {order_by => 'start'});
$c->stash->{special_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ $c->stash->{special_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => 'id', search => 1, title => '#' }, { name => 'id', search => 1, title => $c->loc('#') },
{ name => 'start', search => 1, title => 'Start Date' }, { name => 'start', search => 1, title => $c->loc('Start Date') },
{ name => 'end', search => 1, title => 'End Date' }, { name => 'end', search => 1, title => $c->loc('End Date') },
]); ]);
$c->stash(weekdays_result => $rs); $c->stash(weekdays_result => $rs);
@ -580,7 +576,7 @@ sub peaktime_weekdays_base :Chained('peaktimes_list') :PathPart('weekday') :Capt
unless (defined $weekday_id && $weekday_id >= 0 && $weekday_id <= 6) { unless (defined $weekday_id && $weekday_id >= 0 && $weekday_id <= 6) {
$c->flash(messages => [{ $c->flash(messages => [{
type => 'error', type => 'error',
text => 'This weekday does not exist.' text => $c->loc('This weekday does not exist.')
}]); }]);
$c->response->redirect($c->uri_for_action( $c->response->redirect($c->uri_for_action(
"/billing/peaktimes", [$c->req->captures->[0]], "/billing/peaktimes", [$c->req->captures->[0]],
@ -612,7 +608,7 @@ sub peaktime_weekdays_edit :Chained('peaktime_weekdays_base') :PathPart('edit')
unless ($rs) { unless ($rs) {
$c->flash(messages => [{ $c->flash(messages => [{
type => 'error', type => 'error',
text => 'The timerange you wanted to delete does not exist.' text => $c->loc('The timerange you wanted to delete does not exist.')
}]); }]);
$c->response->redirect($c->uri_for_action( $c->response->redirect($c->uri_for_action(
"/billing/peaktimes", [$c->req->captures->[0]], "/billing/peaktimes", [$c->req->captures->[0]],
@ -634,6 +630,16 @@ sub peaktime_weekdays_edit :Chained('peaktime_weekdays_base') :PathPart('edit')
sub load_weekdays { sub load_weekdays {
my ($self, $c) = @_; my ($self, $c) = @_;
my @WEEKDAYS = (
$c->loc('Monday'),
$c->loc('Tuesday'),
$c->loc('Wednesday'),
$c->loc('Thursday'),
$c->loc('Friday'),
$c->loc('Saturday'),
$c->loc('Sunday')
);
my @weekdays; my @weekdays;
for(0 .. 6) { for(0 .. 6) {
$weekdays[$_] = { $weekdays[$_] = {
@ -667,7 +673,7 @@ sub peaktime_specials_base :Chained('peaktimes_list') :PathPart('date') :Capture
my ($self, $c, $special_id) = @_; my ($self, $c, $special_id) = @_;
unless($special_id && $special_id->is_integer) { unless($special_id && $special_id->is_integer) {
$c->flash(messages => [{type => 'error', text => 'Invalid peaktime date id detected!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Invalid peaktime date id detected!')}]);
$c->response->redirect($c->stash->{peaktimes_root_uri}); $c->response->redirect($c->stash->{peaktimes_root_uri});
return; return;
} }
@ -675,7 +681,7 @@ sub peaktime_specials_base :Chained('peaktimes_list') :PathPart('date') :Capture
my $res = $c->stash->{'profile_result'}->billing_peaktime_specials my $res = $c->stash->{'profile_result'}->billing_peaktime_specials
->find($special_id); ->find($special_id);
unless(defined($res)) { unless(defined($res)) {
$c->flash(messages => [{type => 'error', text => 'Peaktime date does not exist!'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Peaktime date does not exist!')}]);
$c->response->redirect($c->stash->{peaktimes_root_uri}); $c->response->redirect($c->stash->{peaktimes_root_uri});
return; return;
} }
@ -704,12 +710,12 @@ sub peaktime_specials_edit :Chained('peaktime_specials_base') :PathPart('edit')
if($posted && $form->validated) { if($posted && $form->validated) {
try { try {
$c->stash->{special_result}->update($form->values); $c->stash->{special_result}->update($form->values);
$c->flash(messages => [{type => 'success', text => 'Special offpeak entry successfully updated'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Special offpeak entry successfully updated')}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to update special offpeak entry.", desc => $c->loc('Failed to update special offpeak entry.'),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{peaktimes_root_uri}); NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{peaktimes_root_uri});
@ -728,7 +734,7 @@ sub peaktime_specials_delete :Chained('peaktime_specials_base') :PathPart('delet
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to delete special offpeak entry.", desc => $c->loc('Failed to delete special offpeak entry.'),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{peaktimes_root_uri}); NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{peaktimes_root_uri});
@ -756,12 +762,12 @@ sub peaktime_specials_create :Chained('peaktimes_list') :PathPart('date/create')
try { try {
$c->stash->{'profile_result'}->billing_peaktime_specials $c->stash->{'profile_result'}->billing_peaktime_specials
->create($form->values); ->create($form->values);
$c->flash(messages => [{type => 'success', text => 'Special offpeak entry successfully created'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Special offpeak entry successfully created')}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to create special offpeak entry.", desc => $c->loc('Failed to create special offpeak entry.'),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{peaktimes_root_uri}); NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{peaktimes_root_uri});

@ -27,12 +27,12 @@ sub list_contact :Chained('/') :PathPart('contact') :CaptureArgs(0) {
$c->stash(template => 'contact/list.tt'); $c->stash(template => 'contact/list.tt');
$c->stash->{contact_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ $c->stash->{contact_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "id", search => 1, title => "#" }, { name => "id", search => 1, title => $c->loc("#") },
{ name => "reseller.name", search => 1, title => "Reseller" }, { name => "reseller.name", search => 1, title => $c->loc("Reseller") },
{ name => "firstname", search => 1, title => "First Name" }, { name => "firstname", search => 1, title => $c->loc("First Name") },
{ name => "lastname", search => 1, title => "Last Name" }, { name => "lastname", search => 1, title => $c->loc("Last Name") },
{ name => "company", search => 1, title => "Company" }, { name => "company", search => 1, title => $c->loc("Company") },
{ name => "email", search => 1, title => "Email" }, { name => "email", search => 1, title => $c->loc("Email") },
]); ]);
} }
@ -78,12 +78,12 @@ sub create :Chained('list_contact') :PathPart('create') :Args(0) {
my $contact = $c->stash->{contacts}->create($form->values); my $contact = $c->stash->{contacts}->create($form->values);
delete $c->session->{created_objects}->{reseller}; delete $c->session->{created_objects}->{reseller};
$c->session->{created_objects}->{contact} = { id => $contact->id }; $c->session->{created_objects}->{contact} = { id => $contact->id };
$c->flash(messages => [{type => 'success', text => 'Contact successfully created'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Contact successfully created')}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to create contact.", desc => $c->loc("Failed to create contact."),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
@ -103,13 +103,13 @@ sub base :Chained('list_contact') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $contact_id) = @_; my ($self, $c, $contact_id) = @_;
unless($contact_id && $contact_id->is_int) { unless($contact_id && $contact_id->is_int) {
$c->flash(messages => [{type => 'error', text => 'Invalid contact id detected'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Invalid contact id detected')}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
} }
my $res = $c->stash->{contacts}; my $res = $c->stash->{contacts};
$c->stash(contact => $res->find($contact_id)); $c->stash(contact => $res->find($contact_id));
unless($c->stash->{contact}) { unless($c->stash->{contact}) {
$c->flash(messages => [{type => 'error', text => 'Contact not found'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Contact not found')}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
} }
} }
@ -153,13 +153,13 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
} }
delete $form->values->{reseller}; delete $form->values->{reseller};
$c->stash->{contact}->update($form->values); $c->stash->{contact}->update($form->values);
$c->flash(messages => [{type => 'success', text => 'Contact successfully changed'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Contact successfully changed')}]);
delete $c->session->{created_objects}->{reseller}; delete $c->session->{created_objects}->{reseller};
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to update contact.", desc => $c->loc('Failed to update contact.'),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
@ -182,12 +182,12 @@ sub delete :Chained('base') :PathPart('delete') :Args(0) {
try { try {
$c->stash->{contact}->delete; $c->stash->{contact}->delete;
$c->flash(messages => [{type => 'success', text => 'Contact successfully deleted'}]); $c->flash(messages => [{type => 'success', text => $c->loc('Contact successfully deleted')}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to delete contact.", desc => $c->loc('Failed to delete contact.'),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));

@ -22,12 +22,12 @@ sub contract_list :Chained('/') :PathPart('contract') :CaptureArgs(0) {
my ($self, $c) = @_; my ($self, $c) = @_;
$c->stash->{contract_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ $c->stash->{contract_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "id", search => 1, title => "#" }, { name => "id", search => 1, title => $c->loc("#") },
{ name => "external_id", search => 1, title => "External #" }, { name => "external_id", search => 1, title => $c->loc("External #") },
{ name => "contact.email", search => 1, title => "Contact Email" }, { name => "contact.email", search => 1, title => $c->loc("Contact Email") },
{ name => "billing_mappings.product.name", search => 1, title => "Product" }, { name => "billing_mappings.product.name", search => 1, title => $c->loc("Product") },
{ name => "billing_mappings.billing_profile.name", search => 1, title => "Billing Profile" }, { name => "billing_mappings.billing_profile.name", search => 1, title => $c->loc("Billing Profile") },
{ name => "status", search => 1, title => "Status" }, { name => "status", search => 1, title => $c->loc("Status") },
]); ]);
my $rs = NGCP::Panel::Utils::Contract::get_contract_rs( my $rs = NGCP::Panel::Utils::Contract::get_contract_rs(
@ -62,7 +62,11 @@ sub base :Chained('contract_list') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $contract_id) = @_; my ($self, $c, $contract_id) = @_;
unless($contract_id && $contract_id->is_integer) { unless($contract_id && $contract_id->is_integer) {
$c->flash(messages => [{type => 'error', text => 'Invalid contract id detected!'}]); NGCP::Panel::Utils::Message->error(
c => $c,
log => 'Invalid contract id detected!',
desc => $c->loc('Invalid contract id detected!'),
);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
} }
@ -74,7 +78,11 @@ sub base :Chained('contract_list') :PathPart('') :CaptureArgs(1) {
->find($contract_id); ->find($contract_id);
unless(defined($res)) { unless(defined($res)) {
$c->flash(messages => [{type => 'error', text => 'Contract does not exist'}]); NGCP::Panel::Utils::Message->error(
c => $c,
log => 'Contract does not exist',
desc => $c->loc('Contract does not exist'),
);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
} }
@ -165,12 +173,12 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
delete $c->session->{created_objects}->{contact}; delete $c->session->{created_objects}->{contact};
delete $c->session->{created_objects}->{billing_profile}; delete $c->session->{created_objects}->{billing_profile};
}); });
$c->flash(messages => [{type => 'success', text => "Contract successfully changed!"}]); $c->flash(messages => [{type => 'success', text => $c->loc("Contract successfully changed!")}]);
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to update contract.", desc => $c->loc("Failed to update contract."),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
@ -185,7 +193,7 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
my $contract = $c->stash->{contract_result}; my $contract = $c->stash->{contract_result};
if ($contract->id == 1) { if ($contract->id == 1) {
$c->flash(messages => [{type => 'error', text => 'Cannot terminate contract with the id 1'}]); $c->flash(messages => [{type => 'error', text => $c->loc('Cannot terminate contract with the id 1')}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
} }
@ -199,12 +207,12 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
contract => $contract, contract => $contract,
); );
} }
$c->flash(messages => [{type => 'success', text => "Contract successfully terminated"}]); $c->flash(messages => [{type => 'success', text => $c->loc('Contract successfully terminated')}]);
} catch ($e) { } catch ($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to terminate contract.", desc => $c->loc("Failed to terminate contract."),
); );
}; };
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
@ -297,13 +305,13 @@ sub peering_create :Chained('peering_list') :PathPart('create') :Args(0) {
delete $c->session->{created_objects}->{contact}; delete $c->session->{created_objects}->{contact};
delete $c->session->{created_objects}->{billing_profile}; delete $c->session->{created_objects}->{billing_profile};
my $contract_id = $contract->id; my $contract_id = $contract->id;
$c->flash(messages => [{type => 'success', text => "Contract #$contract_id successfully created"}]); $c->flash(messages => [{type => 'success', text => $c->loc("Contract #[_1] successfully created",$contract_id)}]);
}); });
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to create contract.", desc => $c->loc("Failed to create contract."),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
@ -342,7 +350,12 @@ sub reseller_ajax_contract_filter :Chained('reseller_list') :PathPart('ajax/cont
my ($self, $c, $contract_id) = @_; my ($self, $c, $contract_id) = @_;
unless($contract_id && $contract_id->is_int) { unless($contract_id && $contract_id->is_int) {
$c->flash(messages => [{type => 'error', text => 'Invalid contract id detected'}]); $c->flash(messages => [{type => 'error', text => }]);
NGCP::Panel::Utils::Message->error(
c => $c,
log => 'Invalid contract id detected',
desc => $c->loc('Invalid contract id detected'),
);
$c->response->redirect($c->uri_for()); $c->response->redirect($c->uri_for());
return; return;
} }
@ -353,11 +366,11 @@ sub reseller_ajax_contract_filter :Chained('reseller_list') :PathPart('ajax/cont
'me.id' => $contract_id, 'me.id' => $contract_id,
}); });
my $contract_columns = NGCP::Panel::Utils::Datatables::set_columns($c, [ my $contract_columns = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "id", search => 1, title => "#" }, { name => "id", search => 1, title => $c->loc("#") },
{ name => "external_id", search => 1, title => "External #" }, { name => "external_id", search => 1, title => $c->loc("External #") },
{ name => "contact.email", search => 1, title => "Contact Email" }, { name => "contact.email", search => 1, title => $c->loc("Contact Email") },
{ name => "billing_mappings.billing_profile.name", search => 1, title => "Billing Profile" }, { name => "billing_mappings.billing_profile.name", search => 1, title => $c->loc("Billing Profile") },
{ name => "status", search => 1, title => "Status" }, { name => "status", search => 1, title => $c->loc("Status") },
]); ]);
NGCP::Panel::Utils::Datatables::process($c, $rs, $contract_columns); NGCP::Panel::Utils::Datatables::process($c, $rs, $contract_columns);
$c->detach( $c->view("JSON") ); $c->detach( $c->view("JSON") );
@ -417,13 +430,13 @@ sub reseller_create :Chained('reseller_list') :PathPart('create') :Args(0) {
delete $c->session->{created_objects}->{contact}; delete $c->session->{created_objects}->{contact};
delete $c->session->{created_objects}->{billing_profile}; delete $c->session->{created_objects}->{billing_profile};
my $contract_id = $contract->id; my $contract_id = $contract->id;
$c->flash(messages => [{type => 'success', text => "Contract #$contract_id successfully created"}]); $c->flash(messages => [{type => 'success', text => $c->loc('Contract #[_1] successfully created',$contract_id)}]);
}); });
} catch($e) { } catch($e) {
NGCP::Panel::Utils::Message->error( NGCP::Panel::Utils::Message->error(
c => $c, c => $c,
error => $e, error => $e,
desc => "Failed to create contract.", desc => $c->loc("Failed to create contract."),
); );
} }
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract')); NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));

@ -80,7 +80,7 @@ msgstr ""
#: lib/NGCP/Panel/Controller/Administrator.pm:37 #: lib/NGCP/Panel/Controller/Administrator.pm:37
msgid "Active" msgid "Active"
msgstr "" msgstr "Aktiv"
#: lib/NGCP/Panel/Utils/DbStrings.pm:22 #: lib/NGCP/Panel/Utils/DbStrings.pm:22
msgid "Administrative Block List for inbound calls" msgid "Administrative Block List for inbound calls"

@ -19,7 +19,15 @@ msgstr ""
msgid "\"Calling line identification restriction\" - if set to true, the CLI is not displayed on outgoing calls." msgid "\"Calling line identification restriction\" - if set to true, the CLI is not displayed on outgoing calls."
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Root.pm:59 #: lib/NGCP/Panel/Controller/Administrator.pm:29 lib/NGCP/Panel/Controller/Billing.pm:211 lib/NGCP/Panel/Controller/Billing.pm:33 lib/NGCP/Panel/Controller/Billing.pm:508 lib/NGCP/Panel/Controller/Billing.pm:77 lib/NGCP/Panel/Controller/Contact.pm:30 lib/NGCP/Panel/Controller/Contract.pm:25 lib/NGCP/Panel/Controller/Contract.pm:369
msgid "#"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:344
msgid ", but skipped the following line numbers: "
msgstr ""
#: lib/NGCP/Panel/Controller/Root.pm:72
msgid "403 - Permission denied" msgid "403 - Permission denied"
msgstr "" msgstr ""
@ -47,7 +55,7 @@ msgstr ""
msgid "A username used for authentication against the peer host." msgid "A username used for authentication against the peer host."
msgstr "" msgstr ""
#: share/templates/administrator/list.tt:20 share/templates/administrator/list.tt:28 #: share/templates/administrator/list.tt:21 share/templates/administrator/list.tt:29
msgid "API key" msgid "API key"
msgstr "" msgstr ""
@ -103,6 +111,10 @@ msgstr ""
msgid "Administrator successfully updated" msgid "Administrator successfully updated"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:22 share/templates/widgets/reseller_topmenu_settings.tt:8
msgid "Administrators"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:143 lib/NGCP/Panel/Utils/DbStrings.pm:145 #: lib/NGCP/Panel/Utils/DbStrings.pm:143 lib/NGCP/Panel/Utils/DbStrings.pm:145
msgid "Allow access from the given list of IP addresses and/or IP nets." msgid "Allow access from the given list of IP addresses and/or IP nets."
msgstr "" msgstr ""
@ -135,10 +147,86 @@ msgstr ""
msgid "Area Code" msgid "Area Code"
msgstr "" msgstr ""
#: share/templates/helpers/datatables.tt:163 #: share/templates/billing/peaktimes.tt:5 share/templates/helpers/datatables.tt:163
msgid "Back" msgid "Back"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:29 share/templates/widgets/reseller_topmenu_settings.tt:13
msgid "Billing"
msgstr ""
#: share/templates/billing/fees.tt:4
msgid "Billing Fee"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:238
msgid "Billing Fee does not exist!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:280
msgid "Billing Fee successfully created!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:342
msgid "Billing Fee successfully uploaded"
msgstr ""
#: share/templates/billing/fees.tt:1
msgid "Billing Fees"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:29 lib/NGCP/Panel/Controller/Contract.pm:372 share/templates/billing/list.tt:3
msgid "Billing Profile"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:84
msgid "Billing Profile does not exist!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:388
msgid "Billing Profile successfully changed!"
msgstr ""
#: share/templates/billing/list.tt:1
msgid "Billing Profiles"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:215 share/templates/billing/zones.tt:3
msgid "Billing Zone"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:447
msgid "Billing Zone successfully created"
msgstr ""
#: share/templates/billing/zones.tt:1
msgid "Billing Zones"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:401
msgid "Billing fee not found!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:186
msgid "Billing profile successfully created"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:406
msgid "Billing profile successfully deleted!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:129
msgid "Billing profile successfully updated"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:476
msgid "Billing zone does not exist!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:487
msgid "Billing zone successfully deleted"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:12 #: lib/NGCP/Panel/Utils/DbStrings.pm:12
msgid "Block List for inbound calls" msgid "Block List for inbound calls"
msgstr "" msgstr ""
@ -163,10 +251,22 @@ msgstr ""
msgid "CLI of CloudPBX Pilot Subscriber" msgid "CLI of CloudPBX Pilot Subscriber"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:9
msgid "Call Distribution"
msgstr ""
#: share/templates/widgets/subscriber_topmenu_settings.tt:8 share/templates/widgets/subscriberadmin_topmenu_settings.tt:8
msgid "Call List"
msgstr ""
#: lib/NGCP/Panel/Controller/Administrator.pm:208 #: lib/NGCP/Panel/Controller/Administrator.pm:208
msgid "Cannot delete myself" msgid "Cannot delete myself"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:196
msgid "Cannot terminate contract with the id 1"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:163 #: lib/NGCP/Panel/Utils/DbStrings.pm:163
msgid "Choose the logic for RTP/SRTP transcoding (SAVP profile) for the RTP relay" msgid "Choose the logic for RTP/SRTP transcoding (SAVP profile) for the RTP relay"
msgstr "" msgstr ""
@ -195,6 +295,38 @@ msgstr ""
msgid "CloudPBX Subscriber" msgid "CloudPBX Subscriber"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:34
msgid "Company"
msgstr ""
#: share/templates/contact/list.tt:3
msgid "Contact"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:27 lib/NGCP/Panel/Controller/Contract.pm:371
msgid "Contact Email"
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:112
msgid "Contact not found"
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:156
msgid "Contact successfully changed"
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:81
msgid "Contact successfully created"
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:185
msgid "Contact successfully deleted"
msgstr ""
#: share/templates/contact/list.tt:1 share/templates/widgets/admin_topmenu_settings.tt:26 share/templates/widgets/reseller_topmenu_settings.tt:10
msgid "Contacts"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:19 #: lib/NGCP/Panel/Utils/DbStrings.pm:19
msgid "Contains wildcarded SIP usernames (the localpart of the whole SIP URI, eg., \"user\" of SIP URI \"user@example.com\") that are (not) allowed to be called by the subscriber. \"*\", \"?\" and \"x-y\" with \"x\" and \"y\" representing numbers from 0 to 9 may be used as wildcards like in shell patterns." msgid "Contains wildcarded SIP usernames (the localpart of the whole SIP URI, eg., \"user\" of SIP URI \"user@example.com\") that are (not) allowed to be called by the subscriber. \"*\", \"?\" and \"x-y\" with \"x\" and \"y\" representing numbers from 0 to 9 may be used as wildcards like in shell patterns."
msgstr "" msgstr ""
@ -203,14 +335,60 @@ msgstr ""
msgid "Contains wildcarded SIP usernames (the localpart of the whole SIP URI, eg., \"user\" of SIP URI \"user@example.com\") that are (not) allowed to call the subscriber. \"*\", \"?\" and \"x-y\" with \"x\" and \"y\" representing numbers from 0 to 9 may be used as wildcards like in shell patterns." msgid "Contains wildcarded SIP usernames (the localpart of the whole SIP URI, eg., \"user\" of SIP URI \"user@example.com\") that are (not) allowed to call the subscriber. \"*\", \"?\" and \"x-y\" with \"x\" and \"y\" representing numbers from 0 to 9 may be used as wildcards like in shell patterns."
msgstr "" msgstr ""
#. ($contract_id)
#: lib/NGCP/Panel/Controller/Contract.pm:308 lib/NGCP/Panel/Controller/Contract.pm:433
msgid "Contract #%1 successfully created"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:84
msgid "Contract does not exist"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:176
msgid "Contract successfully changed!"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:210
msgid "Contract successfully terminated"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:44 #: lib/NGCP/Panel/Utils/DbStrings.pm:44
msgid "Country Code" msgid "Country Code"
msgstr "" msgstr ""
#: share/templates/administrator/list.tt:24 #: share/templates/billing/zones.tt:21
msgid "Create"
msgstr ""
#. (m.name)
#: share/templates/helpers/modal.tt:6
msgid "Create %1"
msgstr ""
#: share/templates/administrator/list.tt:25
msgid "Create Administrator" msgid "Create Administrator"
msgstr "" msgstr ""
#: share/templates/billing/list.tt:22
msgid "Create Billing Profile"
msgstr ""
#: share/templates/contact/list.tt:22
msgid "Create Contact"
msgstr ""
#: share/templates/billing/fees.tt:23
msgid "Create Fee Entry"
msgstr ""
#: share/templates/billing/peaktimes.tt:74
msgid "Create Special Off-Peak Date"
msgstr ""
#: share/templates/widgets/subscriberadmin_topmenu_settings.tt:12
msgid "Customer Settings"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:181 #: lib/NGCP/Panel/Utils/DbStrings.pm:181
msgid "Customer Sound Set" msgid "Customer Sound Set"
msgstr "" msgstr ""
@ -219,26 +397,63 @@ msgstr ""
msgid "Customer specific Sound Set used for PBX auto-attendant prompts, customer-specific announcements etc." msgid "Customer specific Sound Set used for PBX auto-attendant prompts, customer-specific announcements etc."
msgstr "" msgstr ""
#: share/layout/body.tt:28 #: share/templates/widgets/admin_topmenu_settings.tt:24 share/templates/widgets/reseller_topmenu_settings.tt:9
msgid "Customers"
msgstr ""
#: share/layout/body.tt:39
msgid "Dashboard" msgid "Dashboard"
msgstr "" msgstr ""
#: share/templates/administrator/list.tt:19 #: share/templates/billing/peaktimes.tt:56
msgid "Date Definition"
msgstr ""
#: share/templates/billing/peaktimes.tt:53
msgid "Dates"
msgstr ""
#: share/templates/administrator/list.tt:20 share/templates/billing/fees.tt:20 share/templates/billing/peaktimes.tt:71 share/templates/billing/zones.tt:18 share/templates/contact/list.tt:19
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:213
msgid "Destination Pattern"
msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:36 share/templates/widgets/reseller_topmenu_settings.tt:18
msgid "Device Management"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:148 #: lib/NGCP/Panel/Utils/DbStrings.pm:148
msgid "Disable NAT SIP pings" msgid "Disable NAT SIP pings"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:27 share/templates/widgets/reseller_topmenu_settings.tt:11
msgid "Domains"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:149 #: lib/NGCP/Panel/Utils/DbStrings.pm:149
msgid "Don't do NAT ping for domain/user. Use with caution: this only makes sense on the access network which does not need pings (e.g. CDMA)" msgid "Don't do NAT ping for domain/user. Use with caution: this only makes sense on the access network which does not need pings (e.g. CDMA)"
msgstr "" msgstr ""
#: share/templates/administrator/list.tt:18 share/templates/helpers/pref_table.tt:137 #: share/templates/administrator/list.tt:19 share/templates/billing/fees.tt:19 share/templates/billing/list.tt:17 share/templates/billing/peaktimes.tt:43 share/templates/billing/peaktimes.tt:70 share/templates/contact/list.tt:18 share/templates/helpers/pref_table.tt:137
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#. (m.name)
#: share/templates/helpers/modal.tt:6
msgid "Edit %1"
msgstr ""
#: share/templates/billing/fees.tt:25
msgid "Edit Zones"
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:35
msgid "Email"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:110 #: lib/NGCP/Panel/Utils/DbStrings.pm:110
msgid "Emergency CLI" msgid "Emergency CLI"
msgstr "" msgstr ""
@ -271,6 +486,10 @@ msgstr ""
msgid "Enable Session-Timers" msgid "Enable Session-Timers"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:510
msgid "End Date"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:177 #: lib/NGCP/Panel/Utils/DbStrings.pm:177
msgid "Export subscriber to shared XMPP Buddylist" msgid "Export subscriber to shared XMPP Buddylist"
msgstr "" msgstr ""
@ -279,6 +498,10 @@ msgstr ""
msgid "Export this subscriber into the shared XMPP buddy list for the customer." msgid "Export this subscriber into the shared XMPP buddy list for the customer."
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:26 lib/NGCP/Panel/Controller/Contract.pm:370
msgid "External #"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:77 #: lib/NGCP/Panel/Utils/DbStrings.pm:77
msgid "External Contract #" msgid "External Contract #"
msgstr "" msgstr ""
@ -291,18 +514,82 @@ msgstr ""
msgid "Failed to create administrator." msgid "Failed to create administrator."
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:191
msgid "Failed to create billing profile."
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:452
msgid "Failed to create billing zone."
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:86
msgid "Failed to create contact."
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:314 lib/NGCP/Panel/Controller/Contract.pm:439
msgid "Failed to create contract."
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:718
msgid "Failed to create special offpeak entry."
msgstr ""
#: lib/NGCP/Panel/Controller/Administrator.pm:218 #: lib/NGCP/Panel/Controller/Administrator.pm:218
msgid "Failed to delete administrator." msgid "Failed to delete administrator."
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:492
msgid "Failed to delete billing zone."
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:190
msgid "Failed to delete contact."
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:685
msgid "Failed to delete special offpeak entry."
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:215
msgid "Failed to terminate contract."
msgstr ""
#: lib/NGCP/Panel/Controller/Administrator.pm:192 #: lib/NGCP/Panel/Controller/Administrator.pm:192
msgid "Failed to update administrator." msgid "Failed to update administrator."
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:134
msgid "Failed to update billing profile."
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:162
msgid "Failed to update contact."
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:181
msgid "Failed to update contract."
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:666
msgid "Failed to update special offpeak entry."
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:350
msgid "Failed to upload Billing Fees"
msgstr ""
#: share/templates/billing/list.tt:18
msgid "Fees"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:79 #: lib/NGCP/Panel/Utils/DbStrings.pm:79
msgid "Find Subscriber by UUID" msgid "Find Subscriber by UUID"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:32
msgid "First Name"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:80 #: lib/NGCP/Panel/Utils/DbStrings.pm:80
msgid "For incoming calls from this peer, find the destination subscriber by a uuid parameter in R-URI which has been sent in Contact at outbound registration." msgid "For incoming calls from this peer, find the destination subscriber by a uuid parameter in R-URI which has been sent in Contact at outbound registration."
msgstr "" msgstr ""
@ -323,6 +610,10 @@ msgstr ""
msgid "Force outbound call via socket" msgid "Force outbound call via socket"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:586
msgid "Friday"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:139 lib/NGCP/Panel/Utils/DbStrings.pm:141 #: lib/NGCP/Panel/Utils/DbStrings.pm:139 lib/NGCP/Panel/Utils/DbStrings.pm:141
msgid "Group of addresses and/or IP nets allowed access." msgid "Group of addresses and/or IP nets allowed access."
msgstr "" msgstr ""
@ -331,7 +622,7 @@ msgstr ""
msgid "Hide own number for outbound calls" msgid "Hide own number for outbound calls"
msgstr "" msgstr ""
#: share/layout/body.tt:38 #: share/layout/body.tt:49
msgid "Home" msgid "Home"
msgstr "" msgstr ""
@ -423,10 +714,46 @@ msgstr ""
msgid "Invalid administrator id detected" msgid "Invalid administrator id detected"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:229
msgid "Invalid billing fee id detected!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:469
msgid "Invalid billing zone id detected"
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:106
msgid "Invalid contact id detected"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:357
msgid "Invalid contract id detected"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:68
msgid "Invalid contract id detected!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:624
msgid "Invalid peaktime date id detected!"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:71
msgid "Invalid profile id detected!"
msgstr ""
#: lib/NGCP/Panel/Controller/Contact.pm:33
msgid "Last Name"
msgstr ""
#: lib/NGCP/Panel/Controller/Administrator.pm:43 #: lib/NGCP/Panel/Controller/Administrator.pm:43
msgid "Lawful Intercept" msgid "Lawful Intercept"
msgstr "" msgstr ""
#: share/templates/widgets/subscriber_topmenu_settings.tt:11 share/templates/widgets/subscriberadmin_topmenu_settings.tt:11
msgid "Line Settings"
msgstr ""
#: share/templates/helpers/datatables.tt:207 #: share/templates/helpers/datatables.tt:207
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr ""
@ -435,11 +762,16 @@ msgstr ""
msgid "Lock Level" msgid "Lock Level"
msgstr "" msgstr ""
#. (login_name)
#: share/layout/body.tt:18
msgid "Logged in as %1"
msgstr ""
#: lib/NGCP/Panel/Controller/Administrator.pm:35 #: lib/NGCP/Panel/Controller/Administrator.pm:35
msgid "Login" msgid "Login"
msgstr "" msgstr ""
#: share/layout/body.tt:20 #: share/layout/body.tt:31
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
@ -451,6 +783,10 @@ msgstr ""
msgid "Master" msgid "Master"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:214
msgid "Match Direction"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:73 #: lib/NGCP/Panel/Utils/DbStrings.pm:73
msgid "Maximum number of concurrent outgoing sessions (calls) coming from a subscriber or going to a peer." msgid "Maximum number of concurrent outgoing sessions (calls) coming from a subscriber or going to a peer."
msgstr "" msgstr ""
@ -471,10 +807,26 @@ msgstr ""
msgid "Mobile Push Expiry Timeout" msgid "Mobile Push Expiry Timeout"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:582
msgid "Monday"
msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:4
msgid "Monitoring & Statistics"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:52 #: lib/NGCP/Panel/Utils/DbStrings.pm:52
msgid "NCOS Level" msgid "NCOS Level"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:32 share/templates/widgets/reseller_topmenu_settings.tt:15
msgid "NCOS Levels"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:34
msgid "Name"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:40 #: lib/NGCP/Panel/Utils/DbStrings.pm:40
msgid "Network-Provided CLI" msgid "Network-Provided CLI"
msgstr "" msgstr ""
@ -483,6 +835,15 @@ msgstr ""
msgid "Network-Provided Display Name" msgid "Network-Provided Display Name"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:307
msgid "No Billing Fee file specified!"
msgstr ""
#. (profile.name)
#: share/templates/billing/peaktimes.tt:1
msgid "Off-peak-times for %1"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:136 #: lib/NGCP/Panel/Utils/DbStrings.pm:136
msgid "Outbound Diversion Header" msgid "Outbound Diversion Header"
msgstr "" msgstr ""
@ -511,6 +872,14 @@ msgstr ""
msgid "PIN to bypass outbound Block List" msgid "PIN to bypass outbound Block List"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:632
msgid "Peaktime date does not exist!"
msgstr ""
#: share/templates/billing/list.tt:19
msgid "Peaktimes"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:66 #: lib/NGCP/Panel/Utils/DbStrings.pm:66
msgid "Peer Authentication Domain" msgid "Peer Authentication Domain"
msgstr "" msgstr ""
@ -523,6 +892,14 @@ msgstr ""
msgid "Peer Authentication User" msgid "Peer Authentication User"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:30
msgid "Peerings"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:28
msgid "Product"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:164 #: lib/NGCP/Panel/Utils/DbStrings.pm:164
msgid "RTCP Feedback Mode" msgid "RTCP Feedback Mode"
msgstr "" msgstr ""
@ -535,6 +912,10 @@ msgstr ""
msgid "Read Only" msgid "Read Only"
msgstr "" msgstr ""
#: share/templates/widgets/subscriber_topmenu_settings.tt:10 share/templates/widgets/subscriberadmin_topmenu_settings.tt:10
msgid "Registered Devices"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:108 #: lib/NGCP/Panel/Utils/DbStrings.pm:108
msgid "Reject Emergency Calls" msgid "Reject Emergency Calls"
msgstr "" msgstr ""
@ -543,18 +924,34 @@ msgstr ""
msgid "Reject emergency calls from this user or domain." msgid "Reject emergency calls from this user or domain."
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Administrator.pm:32 #: lib/NGCP/Panel/Controller/Administrator.pm:32 lib/NGCP/Panel/Controller/Billing.pm:35 lib/NGCP/Panel/Controller/Contact.pm:31
msgid "Reseller" msgid "Reseller"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:25
msgid "Reseller and Peering Contracts"
msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:23
msgid "Resellers"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:81 #: lib/NGCP/Panel/Utils/DbStrings.pm:81
msgid "Rewrite Rule Set" msgid "Rewrite Rule Set"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:31 share/templates/widgets/reseller_topmenu_settings.tt:14
msgid "Rewrite Rule Sets"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:38 #: lib/NGCP/Panel/Utils/DbStrings.pm:38
msgid "Ring Timeout for CFT" msgid "Ring Timeout for CFT"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:11
msgid "SIP Call Flows"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:99 #: lib/NGCP/Panel/Utils/DbStrings.pm:99
msgid "SIP Session Timers refresh interval (seconds). Should be always greater than min_timer preference. SBC will make refresh at the half of this interval." msgid "SIP Session Timers refresh interval (seconds). Should be always greater than min_timer preference. SBC will make refresh at the half of this interval."
msgstr "" msgstr ""
@ -607,10 +1004,18 @@ msgstr ""
msgid "Same as \"ncos\", but may only be set by administrators and is applied prior to the user setting." msgid "Same as \"ncos\", but may only be set by administrators and is applied prior to the user setting."
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:587
msgid "Saturday"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:129 #: lib/NGCP/Panel/Utils/DbStrings.pm:129
msgid "Search for partial match of user-provided number (UPN) to subscriber's primary E164 number and aliases. If it mathes, take UPN as valid wihout allowed_clis check and copy UPN to network-provided number (NPN)." msgid "Search for partial match of user-provided number (UPN) to subscriber's primary E164 number and aliases. If it mathes, take UPN as valid wihout allowed_clis check and copy UPN to network-provided number (NPN)."
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:34
msgid "Security Bans"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:9 #: lib/NGCP/Panel/Utils/DbStrings.pm:9
msgid "See \"lock_voip_account_subscriber\" for a list of possible values. A lock value of \"none\" will not be returned to the caller. Read-only setting." msgid "See \"lock_voip_account_subscriber\" for a list of possible values. A lock value of \"none\" will not be returned to the caller. Read-only setting."
msgstr "" msgstr ""
@ -655,6 +1060,10 @@ msgstr ""
msgid "Sets upper limit on accepted Min-SE value in in SBC." msgid "Sets upper limit on accepted Min-SE value in in SBC."
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:18 share/templates/widgets/reseller_topmenu_settings.tt:4 share/templates/widgets/subscriber_topmenu_settings.tt:4 share/templates/widgets/subscriberadmin_topmenu_settings.tt:4
msgid "Settings"
msgstr ""
#: lib/NGCP/Panel/Controller/Administrator.pm:40 #: lib/NGCP/Panel/Controller/Administrator.pm:40
msgid "Show CDRs" msgid "Show CDRs"
msgstr "" msgstr ""
@ -667,6 +1076,22 @@ msgstr ""
msgid "Sound Set used for system prompts like error announcements etc." msgid "Sound Set used for system prompts like error announcements etc."
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:33 share/templates/widgets/reseller_topmenu_settings.tt:16
msgid "Sound Sets"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:212
msgid "Source Pattern"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:713
msgid "Special offpeak entry successfully created"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:661
msgid "Special offpeak entry successfully updated"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:39 #: lib/NGCP/Panel/Utils/DbStrings.pm:39
msgid "Specifies how many seconds the system should wait before redirecting the call if \"cft\" is set." msgid "Specifies how many seconds the system should wait before redirecting the call if \"cft\" is set."
msgstr "" msgstr ""
@ -695,10 +1120,34 @@ msgstr ""
msgid "Specifies whether registration at the peer host is desired." msgid "Specifies whether registration at the peer host is desired."
msgstr "" msgstr ""
#: share/templates/billing/peaktimes.tt:26
msgid "Start - End"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:509
msgid "Start Date"
msgstr ""
#: lib/NGCP/Panel/Controller/Contract.pm:30 lib/NGCP/Panel/Controller/Contract.pm:373
msgid "Status"
msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:28 share/templates/widgets/reseller_topmenu_settings.tt:12
msgid "Subscribers"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:588
msgid "Sunday"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:106 #: lib/NGCP/Panel/Utils/DbStrings.pm:106
msgid "System Sound Set" msgid "System Sound Set"
msgstr "" msgstr ""
#: share/templates/widgets/admin_topmenu_settings.tt:8
msgid "System Statistics"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:117 #: lib/NGCP/Panel/Utils/DbStrings.pm:117
msgid "The SIP header field to fetch the network-provided-number from for inbound calls" msgid "The SIP header field to fetch the network-provided-number from for inbound calls"
msgstr "" msgstr ""
@ -787,6 +1236,18 @@ msgstr ""
msgid "The string to be used as a User-Agent header replacement if ua_header_mode is set to \"replace\"." msgid "The string to be used as a User-Agent header replacement if ua_header_mode is set to \"replace\"."
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:559
msgid "The timerange you wanted to delete does not exist."
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:527
msgid "This weekday does not exist."
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:585
msgid "Thursday"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:132 #: lib/NGCP/Panel/Utils/DbStrings.pm:132
msgid "Total max of outbound calls of Customer" msgid "Total max of outbound calls of Customer"
msgstr "" msgstr ""
@ -803,6 +1264,14 @@ msgstr ""
msgid "Total max of overall concurrent calls" msgid "Total max of overall concurrent calls"
msgstr "" msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:583
msgid "Tuesday"
msgstr ""
#: share/templates/billing/fees.tt:24
msgid "Upload Fees as CSV"
msgstr ""
#: lib/NGCP/Panel/Utils/DbStrings.pm:87 #: lib/NGCP/Panel/Utils/DbStrings.pm:87
msgid "Use Number instead of Contact first for outbound calls" msgid "Use Number instead of Contact first for outbound calls"
msgstr "" msgstr ""
@ -819,7 +1288,31 @@ msgstr ""
msgid "User-Provided Number" msgid "User-Provided Number"
msgstr "" msgstr ""
#: share/layout/body.tt:68 #: share/templates/widgets/subscriber_topmenu_settings.tt:9 share/templates/widgets/subscriberadmin_topmenu_settings.tt:9
msgid "Voicebox Messages"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:584
msgid "Wednesday"
msgstr ""
#: share/templates/billing/peaktimes.tt:25
msgid "Weekday"
msgstr ""
#: share/templates/billing/peaktimes.tt:20
msgid "Weekdays"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:78
msgid "Zone"
msgstr ""
#: lib/NGCP/Panel/Controller/Billing.pm:79
msgid "Zone Details"
msgstr ""
#: share/layout/body.tt:79
msgid "all rights reserved" msgid "all rights reserved"
msgstr "" msgstr ""

@ -10,12 +10,12 @@
<div id="top-nav"> <div id="top-nav">
<ul class="pull-right"> <ul class="pull-right">
<li> <li>
<i class="icon-user"></i> Logged in as [%- IF c.user.roles == 'admin' || c.user.roles == 'reseller' -%]
[% IF c.user.roles == 'admin' || c.user.roles == 'reseller' -%] [% login_name = c.user.login %]
[% c.user.login %] [%- ELSE -%]
[% ELSE -%] [% login_name = c.user.webusername %]@[% c.user.domain.domain %]
[% c.user.webusername %]@[% c.user.domain.domain %] [%- END -%]
[% END -%] <i class="icon-user"></i> [% c.loc("Logged in as [_1]", login_name) %]
</li> </li>
<li class="dropdown"> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">

@ -0,0 +1,24 @@
{
"sEmptyTable": "Keine Daten verfügbar",
"sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen",
"sInfoEmpty": "0 bis 0 von 0 Einträgen",
"sInfoFiltered": "(gefiltert von _MAX_ Einträgen)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "_MENU_ Einträge anzeigen",
"sLoadingRecords": "Loading...",
"sProcessing": "Bitte warten...",
"sSearch": "Suchen:",
"sZeroRecords": "Keine Einträge vorhanden.",
"oPaginate": {
"sFirst": "Erster",
"sLast": "Letzter",
"sNext": "Nächster",
"sPrevious": "Zurück"
},
"oAria": {
"sSortAscending": ": activate to sort column ascending",
"sSortDescending": ": activate to sort column descending"
}
}

@ -1,4 +1,4 @@
[% META title = 'Administrators' -%] [% site_config.title = c.loc('Administrators') -%]
[% [%
helper.name = c.loc('Administrator'); helper.name = c.loc('Administrator');
helper.show_create_button = 1; helper.show_create_button = 1;

@ -1,7 +1,7 @@
[% META title = 'Billing Fees' -%] [% site_config.title = c.loc('Billing Fees') -%]
[% [%
helper.name = 'Billing Fees'; helper.name = c.loc('Billing Fee');
helper.messages = messages; helper.messages = messages;
helper.dt_columns = fee_dt_columns; helper.dt_columns = fee_dt_columns;
helper.length_change = 1; helper.length_change = 1;
@ -15,13 +15,13 @@
helper.tmpuri = c.uri_for( profile.id, 'fees'); helper.tmpuri = c.uri_for( profile.id, 'fees');
UNLESS c.user.read_only; UNLESS c.user.read_only;
helper.dt_buttons = [ helper.dt_buttons = [
{ name = 'Edit', uri = helper.tmpuri _ "/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, { name = c.loc('Edit'), uri = helper.tmpuri _ "/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = 'Delete', uri = helper.tmpuri _ "/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' }, { name = c.loc('Delete'), uri = helper.tmpuri _ "/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' },
]; ];
helper.top_buttons = [ helper.top_buttons = [
{ name = 'Create Fee Entry', uri = c.uri_for( profile.id, 'fees') _ "/create", icon = 'icon-star' }, { name = c.loc('Create Fee Entry'), uri = c.uri_for( profile.id, 'fees') _ "/create", icon = 'icon-star' },
{ name = 'Upload Fees as CSV', uri = c.uri_for_action('/billing/fees_upload',[c.req.captures.0]), icon = 'icon-star' }, { name = c.loc('Upload Fees as CSV'), uri = c.uri_for_action('/billing/fees_upload',[c.req.captures.0]), icon = 'icon-star' },
{ name = 'Edit Zones', uri = c.uri_for_action('/billing/zones',[c.req.captures.0]), icon = 'icon-star' }, { name = c.loc('Edit Zones'), uri = c.uri_for_action('/billing/zones',[c.req.captures.0]), icon = 'icon-star' },
]; ];
END; END;

@ -1,6 +1,6 @@
[% META title = 'Billing Profiles' -%] [% site_config.title = c.loc('Billing Profiles') -%]
[% [%
helper.name = 'Billing Profiles'; helper.name = c.loc('Billing Profile');
helper.messages = messages; helper.messages = messages;
helper.dt_columns = profile_dt_columns; helper.dt_columns = profile_dt_columns;
helper.length_change = 1; helper.length_change = 1;
@ -13,12 +13,12 @@
UNLESS c.user.read_only; UNLESS c.user.read_only;
helper.dt_buttons = [ helper.dt_buttons = [
{ name = 'Edit', uri = "/billing/'+full[\"id\"]+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, { name = c.loc('Edit'), uri = "/billing/'+full[\"id\"]+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = 'Fees', uri = "/billing/'+full[\"id\"]+'/fees", class = 'btn-small btn-tertiary', icon = 'icon-shopping-cart' }, { name = c.loc('Fees'), uri = "/billing/'+full[\"id\"]+'/fees", class = 'btn-small btn-tertiary', icon = 'icon-shopping-cart' },
{ name = 'Peaktimes', uri = "/billing/'+full[\"id\"]+'/peaktimes", class = 'btn-small btn-tertiary', icon = 'icon-time' }, { name = c.loc('Peaktimes'), uri = "/billing/'+full[\"id\"]+'/peaktimes", class = 'btn-small btn-tertiary', icon = 'icon-time' },
]; ];
helper.top_buttons = [ helper.top_buttons = [
{ name = 'Create Billing Profile', uri = c.uri_for('/billing/create'), icon = 'icon-star' }, { name = c.loc('Create Billing Profile'), uri = c.uri_for('/billing/create'), icon = 'icon-star' },
]; ];
END; END;

@ -1,8 +1,8 @@
[% site_config.title = 'Off-peak-times for ' _ profile.name -%] [% site_config.title = c.loc('Off-peak-times for [_1]', profile.name) -%]
<div class="row"> <div class="row">
<span> <span>
<a class="btn btn-primary btn-large" href="[% c.uri_for('/back') %]"><i class="icon-arrow-left"></i> Back</a> <a class="btn btn-primary btn-large" href="[% c.uri_for('/back') %]"><i class="icon-arrow-left"></i>[% c.loc('Back') %]</a>
</span> </span>
</div> </div>
[% back_created = 1 -%] [% back_created = 1 -%]
@ -17,13 +17,13 @@
<div class="ngcp-separator"></div> <div class="ngcp-separator"></div>
<h3>Weekdays</h3> <h3>[% c.loc('Weekdays') %]</h3>
<table class="table table-bordered table-striped table-highlight table-hover"> <table class="table table-bordered table-striped table-highlight table-hover">
<thead> <thead>
<tr> <tr>
<th>Weekday</th> <th>[% c.loc('Weekday') %]</th>
<th>Start - End</th> <th>[% c.loc('Start - End') %]</th>
<th class="ngcp-actions-column"></th>[% #Actions %] <th class="ngcp-actions-column"></th>[% #Actions %]
</tr> </tr>
</thead> </thead>
@ -40,7 +40,7 @@
[% IF w.edit_link %] [% IF w.edit_link %]
<div class="sw_actions pull-right"> <div class="sw_actions pull-right">
<a class="btn btn-small btn-primary" href="[% w.edit_link %]"> <a class="btn btn-small btn-primary" href="[% w.edit_link %]">
<i class="icon-edit"></i> Edit <i class="icon-edit"></i> [% c.loc('Edit') %]
</a> </a>
</div> </div>
[% END %] [% END %]
@ -50,10 +50,10 @@
</tbody> </tbody>
</table> </table>
<h3>Dates</h3> <h3>[% c.loc('Dates') %]</h3>
[% [%
helper.name = 'Date Definitions'; helper.name = c.loc('Date Definition');
helper.dt_columns = special_dt_columns; helper.dt_columns = special_dt_columns;
helper.create_flag = peaktimes_special_createflag; helper.create_flag = peaktimes_special_createflag;
@ -66,11 +66,11 @@
UNLESS c.user.read_only; UNLESS c.user.read_only;
helper.dt_buttons = [ helper.dt_buttons = [
{ name = 'Edit', uri = helper.tmpuri _ "/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, { name = c.loc('Edit'), uri = helper.tmpuri _ "/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = 'Delete', uri = helper.tmpuri _ "/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' }, { name = c.loc('Delete'), uri = helper.tmpuri _ "/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' },
]; ];
helper.top_buttons = [ helper.top_buttons = [
{ name = 'Create Special Off-Peak Date', uri = helper.tmpuri _ "/create", icon = 'icon-star' }, { name = c.loc('Create Special Off-Peak Date'), uri = helper.tmpuri _ "/create", icon = 'icon-star' },
]; ];
END; END;

@ -1,6 +1,6 @@
[% META title = 'Billing Zones' -%] [% site_config.title = c.loc('Billing Zones') -%]
[% [%
helper.name = 'Billing Zones'; helper.name = c.loc('Billing Zone');
helper.messages = messages; helper.messages = messages;
helper.dt_columns = zone_dt_columns; helper.dt_columns = zone_dt_columns;
helper.length_change = 1; helper.length_change = 1;
@ -14,10 +14,10 @@
helper.tmpuri = c.uri_for( profile.id, 'zones'); helper.tmpuri = c.uri_for( profile.id, 'zones');
UNLESS c.user.read_only; UNLESS c.user.read_only;
helper.dt_buttons = [ helper.dt_buttons = [
{ name = 'Delete', uri = helper.tmpuri _ "/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' }, { name = c.loc('Delete'), uri = helper.tmpuri _ "/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' },
]; ];
helper.top_buttons = [ helper.top_buttons = [
{ name = 'Create', uri = c.uri_for(profile.id, 'zones', 'create'), icon = 'icon-star' }, { name = c.loc('Create'), uri = c.uri_for(profile.id, 'zones', 'create'), icon = 'icon-star' },
]; ];
END; END;

@ -1,6 +1,6 @@
[% META title = 'Contacts' -%] [% site_config.title = c.loc('Contacts') -%]
[% [%
helper.name = 'Contact'; helper.name = c.loc('Contact');
helper.data = contacts; helper.data = contacts;
helper.messages = messages; helper.messages = messages;
helper.dt_columns = contact_dt_columns; helper.dt_columns = contact_dt_columns;
@ -14,11 +14,11 @@
UNLESS c.user.read_only; UNLESS c.user.read_only;
helper.dt_buttons = [ helper.dt_buttons = [
{ name = 'Edit', uri = "/contact/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, { name = c.loc('Edit'), uri = "/contact/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = 'Delete', uri = "/contact/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' condition = 'full.deletable' }, { name = c.loc('Delete'), uri = "/contact/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' condition = 'full.deletable' },
]; ];
helper.top_buttons = [ helper.top_buttons = [
{ name = 'Create Contact', uri = c.uri_for('/contact/create'), icon = 'icon-star' }, { name = c.loc('Create Contact'), uri = c.uri_for('/contact/create'), icon = 'icon-star' },
]; ];
END; END;

@ -69,7 +69,7 @@ $(document).ready(function() {
], ],
[% END -%] [% END -%]
"oLanguage": { "oLanguage": {
"sUrl": "js/i18n/[% c.loc('dataTables.default.js') %]" "sUrl": "/js/i18n/[% c.loc('dataTables.default.js') %]"
}, },
"aoColumns": [ "aoColumns": [
[% FOREACH f IN helper.column_fields -%] [% FOREACH f IN helper.column_fields -%]

@ -3,7 +3,7 @@
<div id="mod_edit" class="modal hide ngcp-modal"> <div id="mod_edit" class="modal hide ngcp-modal">
<div class="modal-header"> <div class="modal-header">
<button id="mod_close" type="button" class="close mod_close">×</button> <button id="mod_close" type="button" class="close mod_close">×</button>
<h3>[% m.create_flag == 1 ? 'Create' : 'Edit' %] [% m.name %]</h3> <h3>[% m.create_flag == 1 ? c.loc('Create [_1]',m.name) : c.loc('Edit [_1]',m.name) %]</h3>
</div> </div>
[% END -%] [% END -%]

@ -1,39 +1,39 @@
<li class="dropdown"> <li class="dropdown">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-signal"></i> <i class="icon-signal"></i>
<span>Monitoring &amp; Statistics</span> <span>[% c.loc('Monitoring & Statistics') | html %]</span>
<b class="caret"></b> <b class="caret"></b>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="[% c.uri_for('/statistics') %]">System Statistics</a></li> <li><a href="[% c.uri_for('/statistics') %]">[% c.loc('System Statistics') %]</a></li>
<li><a href="[% c.uri_for('/calls') %]">Call Distribution</a></li> <li><a href="[% c.uri_for('/calls') %]">[% c.loc('Call Distribution') %]</a></li>
[% IF c.config.features.callflow -%] [% IF c.config.features.callflow -%]
<li><a href="[% c.uri_for('/callflow') %]">SIP Call Flows</a></li> <li><a href="[% c.uri_for('/callflow') %]">[% c.loc('SIP Call Flows') %]</a></li>
[% END -%] [% END -%]
</ul> </ul>
</li> </li>
<li class="dropdown"> <li class="dropdown">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-th"></i> <i class="icon-th"></i>
<span>Settings</span> <span>[% c.loc('Settings') %]</span>
<b class="caret"></b> <b class="caret"></b>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="[% c.uri_for('/administrator') %]">Administrators</a></li> <li><a href="[% c.uri_for('/administrator') %]">[% c.loc('Administrators') %]</a></li>
<li><a href="[% c.uri_for('/reseller') %]">Resellers</a></li> <li><a href="[% c.uri_for('/reseller') %]">[% c.loc('Resellers') %]</a></li>
<li><a href="[% c.uri_for('/customer') %]">Customers</a></li> <li><a href="[% c.uri_for('/customer') %]">[% c.loc('Customers') %]</a></li>
<li><a href="[% c.uri_for('/contract') %]">Reseller and Peering Contracts</a></li> <li><a href="[% c.uri_for('/contract') %]">[% c.loc('Reseller and Peering Contracts') %]</a></li>
<li><a href="[% c.uri_for('/contact') %]">Contacts</a></li> <li><a href="[% c.uri_for('/contact') %]">[% c.loc('Contacts') %]</a></li>
<li><a href="[% c.uri_for('/domain') %]">Domains</a></li> <li><a href="[% c.uri_for('/domain') %]">[% c.loc('Domains') %]</a></li>
<li><a href="[% c.uri_for('/subscriber') %]">Subscribers</a></li> <li><a href="[% c.uri_for('/subscriber') %]">[% c.loc('Subscribers') %]</a></li>
<li><a href="[% c.uri_for('/billing') %]">Billing</a></li> <li><a href="[% c.uri_for('/billing') %]">[% c.loc('Billing') %]</a></li>
<li><a href="[% c.uri_for('/peering') %]">Peerings</a></li> <li><a href="[% c.uri_for('/peering') %]">[% c.loc('Peerings') %]</a></li>
<li><a href="[% c.uri_for('/rewrite') %]">Rewrite Rule Sets</a></li> <li><a href="[% c.uri_for('/rewrite') %]">[% c.loc('Rewrite Rule Sets') %]</a></li>
<li><a href="[% c.uri_for('/ncos') %]">NCOS Levels</a></li> <li><a href="[% c.uri_for('/ncos') %]">[% c.loc('NCOS Levels') %]</a></li>
<li><a href="[% c.uri_for('/sound') %]">Sound Sets</a></li> <li><a href="[% c.uri_for('/sound') %]">[% c.loc('Sound Sets') %]</a></li>
<li><a href="[% c.uri_for('/security') %]">Security Bans</a></li> <li><a href="[% c.uri_for('/security') %]">[% c.loc('Security Bans') %]</a></li>
[% IF c.config.features.cloudpbx -%] [% IF c.config.features.cloudpbx -%]
<li><a href="[% c.uri_for('/device') %]">Device Management</a></li> <li><a href="[% c.uri_for('/device') %]">[% c.loc('Device Management') %]</a></li>
[% END -%] [% END -%]
</ul> </ul>
</li> </li>

@ -1,21 +1,21 @@
<li class="dropdown"> <li class="dropdown">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-th"></i> <i class="icon-th"></i>
<span>Settings</span> <span>[% c.loc('Settings') %]</span>
<b class="caret"></b> <b class="caret"></b>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="[% c.uri_for('/administrator') %]">Administrators</a></li> <li><a href="[% c.uri_for('/administrator') %]">[% c.loc('Administrators') %]</a></li>
<li><a href="[% c.uri_for('/customer') %]">Customers</a></li> <li><a href="[% c.uri_for('/customer') %]">[% c.loc('Customers') %]</a></li>
<li><a href="[% c.uri_for('/contact') %]">Contacts</a></li> <li><a href="[% c.uri_for('/contact') %]">[% c.loc('Contacts') %]</a></li>
<li><a href="[% c.uri_for('/domain') %]">Domains</a></li> <li><a href="[% c.uri_for('/domain') %]">[% c.loc('Domains') %]</a></li>
<li><a href="[% c.uri_for('/subscriber') %]">Subscribers</a></li> <li><a href="[% c.uri_for('/subscriber') %]">[% c.loc('Subscribers') %]</a></li>
<li><a href="[% c.uri_for('/billing') %]">Billing</a></li> <li><a href="[% c.uri_for('/billing') %]">[% c.loc('Billing') %]</a></li>
<li><a href="[% c.uri_for('/rewrite') %]">Rewrite Rule Sets</a></li> <li><a href="[% c.uri_for('/rewrite') %]">[% c.loc('Rewrite Rule Sets') %]</a></li>
<li><a href="[% c.uri_for('/ncos') %]">NCOS Levels</a></li> <li><a href="[% c.uri_for('/ncos') %]">[% c.loc('NCOS Levels') %]</a></li>
<li><a href="[% c.uri_for('/sound') %]">Sound Sets</a></li> <li><a href="[% c.uri_for('/sound') %]">[% c.loc('Sound Sets') %]</a></li>
[% IF c.config.features.cloudpbx -%] [% IF c.config.features.cloudpbx -%]
<li><a href="[% c.uri_for('/device') %]">Device Management</a></li> <li><a href="[% c.uri_for('/device') %]">[% c.loc('Device Management') %]</a></li>
[% END -%] [% END -%]
</ul> </ul>
</li> </li>

@ -1,14 +1,14 @@
<li class="dropdown"> <li class="dropdown">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-th"></i> <i class="icon-th"></i>
<span>Settings</span> <span>[% c.loc('Settings') %]</span>
<b class="caret"></b> <b class="caret"></b>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="[% c.uri_for_action('/subscriber/calllist', [subscriber.id]) %]">Call List</a></li> <li><a href="[% c.uri_for_action('/subscriber/calllist', [subscriber.id]) %]">[% c.loc('Call List') %]</a></li>
<li><a href="[% c.uri_for_action('/subscriber/voicemails', [subscriber.id]) %]">Voicebox Messages</a></li> <li><a href="[% c.uri_for_action('/subscriber/voicemails', [subscriber.id]) %]">[% c.loc('Voicebox Messages') %]</a></li>
<li><a href="[% c.uri_for_action('/subscriber/reglist', [subscriber.id]) %]">Registered Devices</a></li> <li><a href="[% c.uri_for_action('/subscriber/reglist', [subscriber.id]) %]">[% c.loc('Registered Devices') %]</a></li>
<li><a href="[% c.uri_for_action('/subscriber/preferences', [subscriber.id]) %]">Line Settings</a></li> <li><a href="[% c.uri_for_action('/subscriber/preferences', [subscriber.id]) %]">[% c.loc('Line Settings') %]</a></li>
</ul> </ul>
</li> </li>
[% # vim: set tabstop=4 syntax=html expandtab: -%] [% # vim: set tabstop=4 syntax=html expandtab: -%]

@ -1,15 +1,15 @@
<li class="dropdown"> <li class="dropdown">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-th"></i> <i class="icon-th"></i>
<span>Settings</span> <span>[% c.loc('Settings') %]</span>
<b class="caret"></b> <b class="caret"></b>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="[% c.uri_for_action('/subscriber/calllist', [subscriber.id]) %]">Call List</a></li> <li><a href="[% c.uri_for_action('/subscriber/calllist', [subscriber.id]) %]">[% c.loc('Call List') %]</a></li>
<li><a href="[% c.uri_for_action('/subscriber/voicemails', [subscriber.id]) %]">Voicebox Messages</a></li> <li><a href="[% c.uri_for_action('/subscriber/voicemails', [subscriber.id]) %]">[% c.loc('Voicebox Messages') %]</a></li>
<li><a href="[% c.uri_for_action('/subscriber/reglist', [subscriber.id]) %]">Registered Devices</a></li> <li><a href="[% c.uri_for_action('/subscriber/reglist', [subscriber.id]) %]">[% c.loc('Registered Devices') %]</a></li>
<li><a href="[% c.uri_for_action('/subscriber/preferences', [subscriber.id]) %]">Line Settings</a></li> <li><a href="[% c.uri_for_action('/subscriber/preferences', [subscriber.id]) %]">[% c.loc('Line Settings') %]</a></li>
<li><a href="[% c.uri_for_action('/customer/details', [c.user.account_id]) %]">Customer Settings</a></li> <li><a href="[% c.uri_for_action('/customer/details', [c.user.account_id]) %]">[% c.loc('Customer Settings') %]</a></li>
</ul> </ul>
</li> </li>
[% # vim: set tabstop=4 syntax=html expandtab: -%] [% # vim: set tabstop=4 syntax=html expandtab: -%]

Loading…
Cancel
Save