Filter Contract Contacts by whether they have a reseller_id

in case the product in billing_mappings is one of
(SIP_PEERING, PSTN_PEERING, VOIP_RESELLER)
agranig/1_0_subfix
Gerhard Jungwirth 12 years ago committed by Andrew Pogrebennyk
parent bf3337b57a
commit 00a7b2d011

@ -200,6 +200,25 @@ sub ajax :Chained('list_contact') :PathPart('ajax') :Args(0) {
$c->detach( $c->view("JSON") );
}
sub ajax_noreseller :Chained('list_contact') :PathPart('ajax_noreseller') :Args(0) {
my ($self, $c) = @_;
NGCP::Panel::Utils::Datatables::process(
$c,
$c->stash->{contacts}->search_rs({
reseller_id => undef,
}, {prefetch=>"contracts"}),
$c->stash->{contact_dt_columns},
sub {
my ($result) = @_;
my %data = (deletable => ($result->contracts->all) ? 0 : 1);
return %data
},
);
$c->detach( $c->view("JSON") );
}
__PACKAGE__->meta->make_immutable;
1;

@ -2,7 +2,10 @@ package NGCP::Panel::Controller::Contract;
use Sipwise::Base;
BEGIN { extends 'Catalyst::Controller'; }
use NGCP::Panel::Form::Contract;
use NGCP::Panel::Form::Contract::Basic;
use NGCP::Panel::Form::Contract::PeeringReseller;
use NGCP::Panel::Form::Contract::ProductSelect;
use NGCP::Panel::Utils::Message;
use NGCP::Panel::Utils::Navigation;
use NGCP::Panel::Utils::Contract;
use NGCP::Panel::Utils::Subscriber;
@ -194,7 +197,20 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
$params->{status} = $contract->status;
}
$params = $params->merge($c->session->{created_objects});
<<<<<<< HEAD
my $form = NGCP::Panel::Form::Contract->new;
=======
my ($form, $is_peering_reseller);
if (defined $billing_mapping->product &&
grep {$billing_mapping->product->handle eq $_}
("SIP_PEERING", "PSTN_PEERING", "VOIP_RESELLER") ) {
$form = NGCP::Panel::Form::Contract::PeeringReseller->new;
$is_peering_reseller = 1;
} else {
$form = NGCP::Panel::Form::Contract::Basic->new;
$is_peering_reseller = 0;
}
>>>>>>> 1991296... Filter Contract Contacts by whether they have a reseller_id
$form->process(
posted => $posted,
params => $c->req->params,
@ -202,7 +218,10 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
);
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c, form => $form,
fields => {'contact.create' => $c->uri_for('/contact/create'),
fields => {
'contact.create' => ( $is_peering_reseller
? $c->uri_for('/contact/create/noreseller')
: $c->uri_for('/contact/create')),
'billing_profile.create' => $c->uri_for('/billing/create')},
back_uri => $c->req->uri,
);
@ -224,6 +243,11 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
$form->{modify_timestamp} = NGCP::Panel::Utils::DateTime::current_local;
$contract->update($form->values);
if ($is_peering_reseller &&
defined $contract->contact->reseller_id) {
die( ["Cannot use this contact for peering or reseller contracts.", "showdetails"] );
}
# if status changed, populate it down the chain
if($contract->status ne $old_status) {
NGCP::Panel::Utils::Contract::recursively_lock_contract(
@ -315,7 +339,11 @@ sub peering_create :Chained('peering_list') :PathPart('create') :Args(0) {
my $posted = ($c->request->method eq 'POST');
my $params = {};
$params = $params->merge($c->session->{created_objects});
<<<<<<< HEAD
my $form = NGCP::Panel::Form::Contract->new;
=======
my $form = NGCP::Panel::Form::Contract::PeeringReseller->new;
>>>>>>> 1991296... Filter Contract Contacts by whether they have a reseller_id
$form->process(
posted => $posted,
params => $c->request->params,
@ -509,7 +537,11 @@ sub reseller_create :Chained('reseller_list') :PathPart('create') :Args(0) {
my $posted = ($c->request->method eq 'POST');
my $params = {};
$params = $params->merge($c->session->{created_objects});
<<<<<<< HEAD
my $form = NGCP::Panel::Form::Contract->new;
=======
my $form = NGCP::Panel::Form::Contract::PeeringReseller->new;
>>>>>>> 1991296... Filter Contract Contacts by whether they have a reseller_id
$form->process(
posted => $posted,
params => $c->request->params,

@ -204,7 +204,9 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
item => $params,
);
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c, form => $form, fields => [qw/contract.create/],
c => $c,
form => $form,
fields => {'contract.create' => $c->uri_for('/contract/reseller/create') },
back_uri => $c->req->uri,
);

@ -0,0 +1,19 @@
package NGCP::Panel::Form::Contract::PeeringReseller;
use HTML::FormHandler::Moose;
extends 'NGCP::Panel::Form::Contract::Basic';
has_field 'contact.id' => (
type => '+NGCP::Panel::Field::DataTable',
label => 'Contact',
do_label => 0,
do_wrapper => 0,
required => 1,
template => 'helpers/datatables_field.tt',
ajax_src => '/contact/ajax_noreseller',
table_titles => ['#', 'First Name', 'Last Name', 'Email'],
table_fields => ['id', 'firstname', 'lastname', 'email'],
);
1;
# vim: set tabstop=4 expandtab:

@ -23,6 +23,12 @@ method error ($self: Catalyst :$c, Str :$desc, Str :$log?, :$error?) {
return;
}
if ( ref($error) eq "ARRAY" && @$error >= 2 && $error->[1] eq "showdetails" ) {
$c->log->error("$desc (@$error[0])");
$c->flash(messages => [{type => 'error', text => "$desc (@$error[0])"}]);
return;
}
unless ( $error->isa('DBIx::Class::Exception') ) {
$c->log->error("$desc ($error)");
$c->flash(messages => [{type => 'error', text => $desc}]);

Loading…
Cancel
Save