+sip peering contracts for www_admin

2.0@2434
Rene Krenn 17 years ago
parent 01e26f774e
commit 571eba44c3

@ -4,6 +4,7 @@ use strict;
use warnings;
use base 'Catalyst::Controller';
use Data::Dumper;
use admin::Utils;
=head1 NAME
@ -30,8 +31,40 @@ sub index : Private {
undef,
\$peer_groups
);
$c->stash->{peer_groups} = $$peer_groups{result};
$c->stash->{editid} = $c->request->params->{editid};
if (ref $$peer_groups{result} eq 'ARRAY' and @{$$peer_groups{result}}) {
$c->stash->{peer_groups} = $$peer_groups{result};
}
$c->stash->{editid} = $c->request->params->{editid};
my $peering_contracts;
my $contracts;
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_sip_peering_contracts',
1,
\$peering_contracts
);
if (ref $$peering_contracts{result} eq 'ARRAY' and @{$$peering_contracts{result}}) {
$contracts = [];
#foreach my $sdentry (sort {$a->{id} <=> $b->{id}} @{$$peering_contracts{result}}) {
foreach my $peering_contract (@{$$peering_contracts{result}}) {
my %contract; # = {};
$contract{id} = $peering_contract->{id};
if(defined $peering_contract->{billing_profile} and length $peering_contract->{billing_profile}) {
my $profile;
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_billing_profile',
{ handle => $peering_contract->{billing_profile} },
\$profile
);
$contract{billing_profile_name} = $$profile{data}{name};
} else {
$contract{billing_profile_name} = '';
}
$contract{short_contact} = admin::Utils::short_contact($c,$peering_contract->{contact});
#$contract{status} = $peering_contract->{status};
$contract{create_timestamp} = $peering_contract->{create_timestamp};
push @$contracts,\%contract;
}
$c->stash->{contracts} = $contracts;
}
return 1;
}
@ -745,6 +778,179 @@ sub copy_rewrite : Local {
}
=head2 detail
Show SIP peering contract details.
=cut
sub contract_detail : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/contract_detail.tt';
my $contract;
my $contract_id = $c->request->params->{contract_id} || undef;
if(defined $contract_id) {
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_sip_peering_contract_by_id',
{ id => $contract_id },
\$contract
);
}
if(ref $c->session->{restore_contract_input} eq 'HASH') {
if($c->config->{billing_features}) {
$contract->{billing_profile} = $c->session->{restore_contract_input}{billing_profile};
}
$contract->{contact} = $c->session->{restore_contract_input}{contact};
delete $c->session->{restore_contract_input};
}
# we only use this to fill the drop-down lists
if($c->request->params->{edit_contract}) {
my $billing_profiles;
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_billing_profiles',
undef,
\$billing_profiles
);
$c->stash->{billing_profiles} = [ sort { $$a{data}{name} cmp $$b{data}{name} }
@{$$billing_profiles{result}} ];
} else {
if(defined $contract->{billing_profile}) {
my $profile;
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_billing_profile',
{ handle => $contract->{billing_profile} },
\$profile
);
$contract->{billing_profile_name} = $$profile{data}{name};
}
}
$c->stash->{contract} = $contract;
$c->stash->{contact_form_fields} = admin::Utils::get_contract_contact_form_fields($c,$contract->{contact});
if($c->config->{billing_features}) {
$c->stash->{billing_features} = 1;
}
$c->stash->{edit_contract} = $c->request->params->{edit_contract};
return 1;
}
=head2 save_account
Create or update details of a SIP peering contract.
=cut
sub save_contract : Local {
my ( $self, $c ) = @_;
my %messages;
my %settings;
my $contract_id = $c->request->params->{contract_id} || undef;
my $billing_profile = $c->request->params->{billing_profile};
$settings{billing_profile} = $billing_profile if defined $billing_profile;
my %contact;
my $contract_contact_form_fields = admin::Utils::get_contract_contact_form_fields($c,undef);
if (ref $contract_contact_form_fields eq 'ARRAY') {
foreach my $form_field (@$contract_contact_form_fields) {
if (defined $c->request->params->{$form_field->{field}} and length($c->request->params->{$form_field->{field}})) {
$contact{$form_field->{field}} = $c->request->params->{$form_field->{field}};
}
}
}
$settings{contact} = \%contact;
if(keys %settings or (!$c->config->{billing_features} and !defined $contract_id)) {
if(defined $contract_id) {
if($c->model('Provisioning')->call_prov( $c, 'billing', 'update_sip_peering_contract',
{ id => $contract_id,
data => \%settings,
},
undef))
{
$messages{conmsg} = 'Server.Voip.SavedSettings';
$c->session->{messages} = \%messages;
$c->response->redirect("/peering/contract_detail?edit_contract=1&amb;contract_id=$contract_id");
return;
}
} else {
if($c->model('Provisioning')->call_prov( $c, 'billing', 'create_sip_peering_contract',
{ data => \%settings },
\$contract_id))
{
$messages{conmsg} = 'Web.Account.Created';
$c->session->{messages} = \%messages;
$c->response->redirect("/peering/contract_detail?edit_contract=1&amb;contract_id=$contract_id");
return;
}
}
}
$c->session->{messages} = \%messages;
$c->session->{restore_contract_input} = \%settings;
$c->response->redirect("/peering/contract_detail?edit_contract=1&amb;contract_id=$contract_id");
return;
}
=head2 terminate
Terminates a SIP peering contract.
=cut
sub terminate_contract : Local {
my ( $self, $c ) = @_;
my %messages;
my $contract_id = $c->request->params->{contract_id};
if($c->model('Provisioning')->call_prov( $c, 'billing', 'terminate_sip_peering_contract',
{ id => $contract_id },
undef))
{
$messages{topmsg} = 'Server.Voip.SubscriberDeleted';
$c->session->{messages} = \%messages;
$c->response->redirect("/peering");
return;
}
$c->session->{messages} = \%messages;
$c->response->redirect("/peering/contract_detail?edit_contract=1&amb;contract_id=$contract_id");
return;
}
=head2 delete
Deletes a SIP peering contract.
=cut
sub delete_contract : Local {
my ( $self, $c ) = @_;
my %messages;
my $contract_id = $c->request->params->{contract_id};
if($c->model('Provisioning')->call_prov( $c, 'billing', 'delete_sip_peering_contract',
{ id => $contract_id },
undef))
{
$messages{topmsg} = 'Server.Voip.SubscriberDeleted';
$c->session->{messages} = \%messages;
$c->response->redirect("/peering");
return;
}
$c->session->{messages} = \%messages;
$c->response->redirect("/peering/contract_detail?edit_contract=1&amb;contract_id=$contract_id");
return;
}
=head1 BUGS AND LIMITATIONS
=over

@ -62,4 +62,47 @@ sub get_default_slot_list {
}
#-# sub short_contact
#-# parameter $c, $contact
#-# return $short_contact
#-# description gets a short representation of a (contract) contact
sub short_contact {
my ($c,$contact) = @_;
if (defined $contact->{company} and length($contact->{company})) {
return $contact->{company};
} elsif (defined $contact->{lastname} and length($contact->{lastname})) {
if (defined $contact->{firstname} and length($contact->{firstname})) {
return $contact->{lastname} . ', ' . $contact->{firstname};
} else {
return $contact->{lastname};
}
} elsif (defined $contact->{firstname} and length($contact->{firstname})) {
return $contact->{firstname};
} else {
#die?
return '';
}
}
#-# sub get_contract_contact_form_fields
#-# parameter $c
#-# return \%contract_contact_form_fields
#-# description defines contract contact form fields
sub get_contract_contact_form_fields {
my ($c,$contact) = @_;
return [ { field => 'firstname',
label => 'Firtst Name',
value => $contact->{firstname} },
{ field => 'lastname',
label => 'Last Name',
value => $contact->{lastname} },
{ field => 'company',
label => 'Company',
value => $contact->{company} }];
}
1;

@ -0,0 +1,74 @@
[% IF contract.id %]
<h3>SIP Peering Contract [% contract.id %]</h3>
[% ELSE %]
<h3>New SIP Peering Contract</h3>
[% END %]
[% UNLESS contract.terminate_timestamp || Catalyst.session.admin.read_only %]
<div class="actions">
<a href="/peering" class="aaction">back</a>
[% IF edit_contract %]
[% IF contract.id %]
<a href="terminate_contract?contract_id=[% contract.id %]" class="aaction">terminate</a>
<a href="delete_contract?contract_id=[% contract.id %]" class="aaction">delete</a>
[% END %]
[% END %]
</div>
[% END %]
<div class="p1">
[% IF messages.conmsg %]<div class="goodmsg">[% messages.conmsg %]</div>[% END %]
[% IF messages.conerr %]<div class="errormsg">[% messages.conerr %]</div>[% END %]
<form action="save_contract" method="post">
<input type="hidden" name="contract_id" value="[% contract.id %]" />
<table>
[% IF contract.id %]
<tr><td class="tdkey">ContractID:</td><td>[% contract.id %]</td></tr>
[% END %]
[% IF billing_features %]
<tr>
<td class="tdkey">billing profile:</td>
<td>
[% IF edit_contract %]
<select size="1" name="billing_profile">
[% FOREACH profile = billing_profiles %]
<option value="[% profile.handle %]"
[% IF profile.handle == contract.billing_profile %]
selected="selected"
[% END %]>[% profile.data.name %]</option>
[% END %]
</select>
[% ELSE %]
[% contract.billing_profile_name %]
[% END %]
</td>
</tr>
[% END %]
[% FOREACH contact_form_field = contact_form_fields %]
<tr>
<td class="tdkey">[% contact_form_field.label %]:</td>
<td>
[% IF edit_contract %]
<input type="text" name="[% contact_form_field.field %]" value="[% contact_form_field.value %]" />
[% ELSE %]
[% contact_form_field.value %]
[% END %]
</td>
</tr>
[% END %]
[% IF contract.id %]
<tr><td class="tdkey">created:</td><td>[% contract.create_timestamp %]</td></tr>
<tr><td class="tdkey">modified:</td><td>[% contract.modify_timestamp %]</td></tr>
[% IF contract.terminate_timestamp %]
<tr><td class="tdkey">terminated:</td><td><div class="alert">[% contract.terminate_timestamp %]</div></td></tr>
[% END %]
[% END %]
</table>
[% IF edit_contract %]
<input type="submit" class="but" value="Save &#187;" />
[% END %]
</form>
</div>

@ -1,9 +1,51 @@
<h3 id="contract">SIP Peering Contracts</h3>
[% UNLESS Catalyst.session.admin.read_only %]
[% IF Catalyst.config.billing_features %]
<div class="actions">
<a href="/peering/contract_detail?edit_contract=1" class="aaction">create new</a>
</div>
[% END %]
[% END %]
<div class="p1">
[% IF contracts %]
<table class="contracts">
<tr>
<td class="table_header">ContractID</td>
<td class="table_header">Billing Profile</td>
<td class="table_header">Contact</td>
<td class="table_header">created</td>
<td style="width:40px;" />
</tr>
[% FOREACH contract = contracts %]
<tr class="[% sdentry.background %]">
<td>[% contract.id %]</td>
<td>[% contract.billing_profile_name%]</td>
<td>[% contract.short_contact %]</td>
<td>[% contract.create_timestamp %]</td>
[% UNLESS Catalyst.session.admin.read_only %]
[% IF Catalyst.config.billing_features %]
<td><a href="/peering/contract_detail?edit_contract=1&amp;contract_id=[% contract.id %]" class="aaction">edit</a></td>
[% END %]
[% END %]
</tr>
[% END %]
</table>
[% ELSE %]
<div>
No sip peering contracts created yet.
</div>
[% END %]
</div>
<h3>SIP Peering Groups</h3>
<div class="p1">
[% IF messages.epeermsg %]<div class="goodmsg">[% messages.epeermsg %]</div>[% END %]
[% IF messages.epeererr %]<div class="errormsg">[% messages.epeererr %]</div>[% END %]
[% IF peer_groups %]
<table class="domains">
<tr class="table_header">
<td>Name</td>
@ -65,6 +107,11 @@
[% id = id + 1 %]
[% END %]
</table>
[% ELSE %]
<div>
No sip peering groups defined yet.
</div>
[% END %]
</div>
[% UNLESS Catalyst.session.admin.read_only %]
@ -122,3 +169,4 @@
</div>
[% END %]

Loading…
Cancel
Save